Пользовательский ответ + http status?
Вопрос
У меня есть интерфейс отдыха для моего проекта. Для одного класса у меня есть метод сообщения, где вы можете опубликовать XML, и я возвращаю пользовательский ответ как:
<customResponse>Invalid email</customResponse>
Если электронное письмо от XML, которое было опубликовано, было неверным + другие пользовательские сообщения, которые я определил для различных ситуаций.
Для всего этого статус HTTP автоматически устанавливается на 200 (OK). Есть ли способ изменить его?
PS: Я знаю, что могу бросить веб -приложение, например:
throw new WebApplicationException(Response.Status.BAD_REQUEST);
Но в этом случае мой пользовательский ответ больше не включен.
Поэтому я просто хочу вернуть свою пользовательскую ошибку + 400 в качестве ответа HTTP.
Заранее спасибо.
ОБНОВИТЬ После комментариев: Мой метод:
@POST
@Path("{membershipExternalId}")
@Consumes(MediaType.APPLICATION_XML)
@Produces("application/xml")
public CustomResponse invite(){ //code}
Вы видите, что я возвращаю свой пользовательский ответ. Если бы я вернул простой ответ, я мог бы установить статус, но в этом случае я не вижу никакого пути.
Решение
Нашел решение:
Поместите тип возврата как ответ на метод:
@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>