2009-09-15 6 views
51

Mam kontroler, który musi zwrócić stronę 404 i kod statusu w określonych warunkach. Nie mogę się dowiedzieć, jak to zrobić w Grails. Współpracownik polecił tę metodę:Jak mogę zwrócić kod statusu 404/50x z kontrolera Grails?

response.sendError(HttpServletResponse.SC_NOT_FOUND) 

który działa idealnie dobrze, ale nie jest bardzo podobny do Grails. Wiem, że metoda renderowania Railsów przyjmuje argument statusu, ale renderowanie Grailsa nie ma takiej funkcjonalności. Czy jest coś, czego mi brakuje, jaki jest najlepszy sposób, aby to osiągnąć?

Odpowiedz

48

Ustawienie statusu odpowiedzi z własnym oświadczeniem jest wystarczająco dobre. To nie wygląda zbyt brzydki i jest całkiem prosta:

response.status = 404; 

Używałem ten sam powodzeniem i have seen others do it this way też. Ponieważ jest to po prostu ustawiacz, możesz także robić inne rzeczy po ustawieniu statusu. Niezależnie od tego, jaki status ustawisz jako ostatni, będzie to, czego używa HttpServletResponse, kiedy faktycznie wysyła odpowiedź z powrotem do klienta.

+0

Link do artykułu IBM już nie działa. –

+1

@ Al-Punk Naprawiono, dzięki za heads up. –

8

response.sendError i response.setStatus to tylko dwa sposoby, które znam. Jeśli jesteś static import HttpServletResponse, to nie jest tak, że "nie grasz jak".

42

response.sendError(404) będzie współpracować z Grails UrlMappings, natomiast response.status = 404 nie z jakiegoś powodu. Jest to użyteczne, jeśli chcesz renderować niestandardową stronę błędu 404, zamiast wysyłać 404 z powrotem do przeglądarki.