2013-02-28 1 views
2

Когда клиент выполняет 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. Что происходит?

+0

как вы тестируете свое спокойное обслуживание? – Sikorski

+0

Я использую версию 1.17 Джерси на сервере Tomcat. Я использую REST Console в Chrome для тестирования ... – markthegrea

+0

ли ваш CDSResponse имеет XML-аннотации, такие как @XmlRootElement и т. Д.? – Sikorski

ответ

0

Мое решение было простым. Не отправляйте обратно 400 с. В этом конкретном случае инструмент Oracle будет принимать только 200, поэтому он не очень успокаивается. Таким образом, все составляет 200, а в ответе XML есть реальный код.

Смежные вопросы