2012-04-16 13 views
5
aplikacja

Web z ram resteasy(@Context HttpServletResponse odpowiedź nie działa w resteasy

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

} 

dlaczego dostać/powrót DO3 204, a nie 202 Z góry dzięki

PS:.?. (1) przełączyć do metody @post nie można uzyskać oczekiwanego kodu: 202 przez get. (2) response.addHeader ("klucz", "wartość"); może pracować normalnie

Odpowiedz

6

RESTEasy interpretuje twoją metodę jako najlepszą może - nie określiłeś typu zwrotu, więc zwraca z powrotem 204 (Brak treści) Klient. Metoda void GET naprawdę nie robi wiele sensu i powinno się jej unikać lub przekształcać w inny czasownik HTTP (np. POST).

Na ten temat nie jest to właściwy sposób ustawiania statusu odpowiedzi z połączeń JAX-RS. Zamiast tego należy użyć wartości ResponseBuilder.

Response.status(202).build(); 

Można oczywiście użyć wstrzykuje HttpServletResponse dla jakiejkolwiek innej rzeczy, o ile ma to sens w kontekście połączenia:

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

Dzięki. Czy masz na myśli, że wstrzyknięta HttpServletResponse nie może ustawić kodu statusu w resteasy, ale inne funkcje działają poprawnie? – jiafu

+1

On oznacza, że ​​RESTEasy działa poprawnie; powinieneś ustawić kody statusu, zwracając obiekt 'Response'. –

+0

Odpowiedź na pytanie "Czy masz na myśli, że wstrzyknięta HttpServletResponse nie może ustawić kodu statusu w resteasy, ale inne funkcje działają prawidłowo?" jest w zasadzie tak. Możesz ustawić wartości nagłówków, ale zmiana kodu statusu nie będzie działać. – Enwired

Powiązane problemy