Пользовательский ответ + статус HTTP? - PullRequest
3 голосов
/ 18 марта 2010

У меня есть интерфейс отдыха для моего проекта. Для одного класса у меня есть метод POST, где вы можете опубликовать xml, и я ВЕРНУТЬ пользовательский ответ , например:

<customResponse>Invalid email</customResponse>

если сообщение электронной почты из xml, которое было опубликовано, было неверным + другие пользовательские сообщения, которые я определил для различных ситуаций.

Для всех этих параметров HTTP STATUS автоматически устанавливается на 200 (ОК). Есть ли способ изменить это?

Ps: я знаю, что могу бросить веб-приложение вроде:

throw new WebApplicationException(Response.Status.BAD_REQUEST);

но в этом случае мой пользовательский ответ больше не включается.

Так что я просто хочу вернуть свою пользовательскую ошибку + 400 в качестве ответа http.

Заранее спасибо.

ОБНОВЛЕНИЕ после комментариев: Мой метод:

 @POST
 @Path("{membershipExternalId}")
 @Consumes(MediaType.APPLICATION_XML)
 @Produces("application/xml")
 public CustomResponse invite(){ //code}

Вы видите, что я возвращаю свой ТАМОЖЕННЫЙ ОТВЕТ. Если бы я вернул простой ОТВЕТ, я мог бы установить СТАТУС, но в этом случае я ничего не вижу.

Ответы [ 3 ]

8 голосов
/ 18 марта 2010

Нашли решение:

В качестве ответа на метод укажите тип возврата:

     @POST
     @Path("{membershipExternalId}")
     @Consumes(MediaType.APPLICATION_XML)
     @Produces("application/xml")
     public Response invite(){ //code

     if (fail())
        return Response.status(400).entity(customResponse).build();
}

Response.status (400) .entity (customResponse) сделает свое дело. Когда build () будет конвертировать ваш пользовательский ответ xml =>

HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Set-Cookie: JSESSIONID=1C72921619A6B32BC1166B3567A39ADA; Path=/
Content-Type: application/xml
Content-Length: 140
Date: Thu, 18 Mar 2010 12:15:15 GMT
Connection: close

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><customResponse><message>Invalid email</message></customResponse>
2 голосов
/ 18 марта 2010

setStatus или sendError на HttpServletResponse должны помочь.

0 голосов
/ 18 марта 2010

Это тег Java, но я не распознаю Response.Status.BAD_REQUEST.

Для Java просто вызовите setStatus для объекта HttpServletResponse.

Для .NET это выглядит так:

HttpContext.Current.Response.StatusCode = xxx;

...