Когда клиент выполняет POST, мне нужно проверить параметры String для плохих символов. Когда я нахожу его, мне нужно вернуть сообщение, чтобы указать, что было неправильно. Обычно я использую text/plain, но наш клиент использует какой-то инструмент Oracle, который должен вернуть XML из запроса POST (см. Рисунок).Как вернуть XML из кода ответа Джерси 400
Я создал специальное исключение для создания ответа:
public class RESTException extends WebApplicationException {
public RESTException(Response.Status status, String messageKey) {
super(Response.status(status).entity("a messasge").type(MediaType.TEXT_PLAIN).build());
}
public RESTException(Response.Status status, String messageKey, boolean useEntity) {
super(Response.status(status).entity(new CDSResponse(Integer.toString(status.getStatusCode()), PropertyFileAccessor.getInstance().getPropertyWithDefault(messageKey))).type(MediaType.APPLICATION_XML).build());
}
Обычно я выполняю первый метод при создании ошибки, но я обработал второй метод с объектом, чтобы вернуть XML.
Вот метод, который я использую в качестве endpoing:
@POST
@Consumes({"application/assetId-v1+xml", "application/assetId-v1+json"})
@Produces({MediaType.APPLICATION_XML})
@Path("/{dealerCode}/{dcn}/{make}/{serialNumber}")
public Response postV1(AssetId assetId, @PathParam("dealerCode") String dealerCode, @PathParam("dcn") String dcn, @PathParam("make") String make, @PathParam("serialNumber") String serialNumber) {
if (!StringUtils.isAlphanumeric(dealerCode)) {
throw new RESTException(Status.BAD_REQUEST, "equipmentdata.400.invalid.dealer.code", true);
}
Вот вопрос/ошибка: Когда я бросаю 400, я получаю это как ответ:
[email protected]
Но когда я бросаю какой-либо другой код состояния, я получаю xml. Что происходит?
как вы тестируете свое спокойное обслуживание? – Sikorski
Я использую версию 1.17 Джерси на сервере Tomcat. Я использую REST Console в Chrome для тестирования ... – markthegrea
ли ваш CDSResponse имеет XML-аннотации, такие как @XmlRootElement и т. Д.? – Sikorski