2012-04-16 7 views
5
aplicación

Web con el marco resteasy(respuesta @Context HttpServletResponse no funcionar en resteasy

@Path("/do3") 
@GET 
public void response(@Context HttpServletResponse response) throws IOException{ 
    response.setStatus(202); 

} 

¿Por qué obtener/OC3 retorno 204, no 202 Gracias de antemano

PS:.?. (1) me cambio para el método @post. También no puede obtener el código esperado: 202 by get. (2) response.addHeader ("clave", "valor"); puede funcionar normalmente.

Respuesta

6

RESTEasy está interpretando su método como mejor puede - no especificó un tipo de devolución por lo que devuelve un 204 (Sin contenido) de nuevo a el cliente. Un método GET void realmente no tiene mucho sentido y debe evitarse, o convertirse en otro verbo HTTP (como POST).

En cuanto al tema, esta no es la manera correcta de establecer el estado de las respuestas de las llamadas JAX-RS. Deberías usar el ResponseBuilder en su lugar.

Response.status(202).build(); 

Puede, por supuesto, utilizar el HttpServletResponse inyectada por cualquier otra cosa, siempre y cuando tenga sentido en el contexto de la llamada:

response.setHeader("Location", "http://www.example.com/myresource/5"); 
+1

Gracias. ¿Quiere decir que la HttpServletResponse inyectada no puede establecer el código de estado en resteasy pero otras características funcionan correctamente? – jiafu

+1

Quiere decir que RESTEasy está funcionando bien; debe establecer códigos de estado devolviendo un objeto 'Respuesta'. –

+0

La respuesta a esto "¿Quiere decir que HttpServletResponse inyectado no puede establecer el código de estado en resteasy pero otras características funcionan correctamente?" es básicamente sí Puede establecer valores de encabezado, pero cambiar el código de estado no funcionará. – Enwired

Cuestiones relacionadas