Pregunta

Tengo una interfaz de descanso para mi proyecto. Para una clase tengo un método POST donde se puede enviar un xml Y vuelvo a respuesta personalizada como:

<customResponse>Invalid email</customResponse>

si el correo electrónico desde el xml que fue publicado, era incorrecto + otros mensajes personalizados he definido para diferentes situaciones.

Para todos estos ESTADO HTTP se pone automáticamente en 200 (OK). ¿Hay alguna manera de cambiarlo?

PD: Sé que puedo lanzar una aplicación web como:

throw new WebApplicationException(Response.Status.BAD_REQUEST);

pero en este caso mi respuesta personalizada no más está incluido.

Así que sólo quiero volver a mi error personalizado + 400 como respuesta HTTP.

Gracias de antemano.

Actualizar después de los comentarios: Mi método es:

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

Se ve que vuelvo a mi encargo de la respuesta. Si volvería simple respuesta que podría establecer el estado pero en este caso no puedo ver ninguna manera.

¿Fue útil?

Solución

encontrado la solución:

Ponga el tipo de retorno como respuesta al método:

     @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) hará el truco. Cuando build () que convertirá su respuesta personalizada 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>

Otros consejos

setStatus o sendError en HttpServletResponse debe hacer el truco.

Este es etiquetado de Java pero no reconocen Response.Status.BAD_REQUEST.

Para Java simplemente llame setStatus en el objeto HttpServletResponse.

Para .NET que se parece a esto:

HttpContext.Current.Response.StatusCode = xxx;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top