2012-04-16 4 views
5

Веб-приложение с каркасом Resteasy(@Context HttpServletResponse ответ не работает в Resteasy

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

} 

почему получить/do3 возврат 204, а не 202 Заранее спасибо

PS:.?. (1) переключаюсь к методу @post, он также не может получить ожидаемый код: 202 by get. (2) response.addHeader («ключ», «значение») может нормально работать.

ответ

6

RESTEasy интерпретирует ваш метод как лучший он может - вы не указали тип возврата, чтобы он возвращал 204 (без содержимого) обратно клиент. Метод void GET действительно не делает много смысла и его следует избегать или преобразовать в другой HTTP-глагол (например, POST).

По вопросу, это неправильный способ установить статус ответов от вызовов JAX-RS. Вместо этого вы должны использовать ResponseBuilder.

Response.status(202).build(); 

Вы можете, конечно, использовать впрыскивается HttpServletResponse для любой другой вещи, пока это имеет смысл в контексте вызова:

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

Спасибо. Вы имеете в виду, что введенный HttpServletResponse не может установить код состояния в resteasy, но другие функции работают правильно? – jiafu

+1

Он означает, что RESTEasy работает правильно; вы должны установить коды состояния, возвратив объект 'Response'. –

+0

Ответ на этот вопрос «Вы имеете в виду, что введенный HttpServletResponse не может установить код состояния в resteasy, но другие функции работают правильно?» в принципе да. Вы можете установить значения заголовков, но изменение кода состояния не будет работать. – Enwired