2010-09-27 14 views
16

niedawno przeprowadziliśmy się do wiosny 3.0 Controller obsługi tak:Wiosna 3,0 HEAD kupna

@Controller 
public class MyController { 
    @RequestMapping(method = RequestMethod.POST) 
    protected String onSubmit (Form form, Errors errors) { 
     // handle POST 
    } 

    @RequestMapping(method = RequestMethod.GET) 
    protected void getForm (Form form) { 
    // handle GET 
    } 
} 

Teraz są coraz mnóstwo wyjątków w naszych dziennikach ponieważ wniosków głową.

org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'HEAD' not supported 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodResolver.resolveHandlerMethod(AnnotationMethodHandlerAdapter.java:621) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:422) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:415) 
    ... 

Chciałbym zagłówek kupna w ten sam sposób jak żądań GET, ale posłuszeństwa odwołanie HTTP przedmiotu:

Metoda HEAD jest identyczna z GET wyjątkiem tego, że serwer nie powinien
zwraca treść wiadomości w odpowiedzi. Metainformacja zawarta w nagłówkach HTTP w odpowiedzi na żądanie HEAD POWINNA być identyczna z informacją przesłaną w odpowiedzi na żądanie GET . Metodę tę można zastosować do uzyskania metainformacji o numerze , która jest implikowana przez żądanie bez przeniesienia samej jednostki encji . Ta metoda jest często używana do testowania łączy hipertekstowych pod kątem poprawności dla modyfikacji i ostatniej modyfikacji . http://www.ietf.org/rfc/rfc2616.txt

Czy ktoś ma eleganckie rozwiązanie, czy też istnieje jeszcze rozwiązanie wiosna out-of-the-box?

Przeszukałem internet, ale nie znalazłem na nie odpowiedzi.

+0

Co robi żądania głowy? Czy może to być błędna konfiguracja po stronie klienta lub po stronie klienta (JavaScript)? Pytam, ponieważ zwykle HEAD ma na celu sprawdzenie aktualizacji strony (tj. Nagłówków Cache-Control/LastModified), aby przeglądarka mogła aktualizować jest konieczna. – AngerClown

+0

PycURL robi metodę żądania = głowa do robienia dostaje. Zwykle odkryłem, że jest to bardzo normalne w przypadku wielu wyszukiwarek takich jak: oneriot.com, ask.com itd. –

+4

kogo obchodzi, które narzędzie tworzy Żądanie HEAD. Jest to prawidłowe żądanie HTTP i wiele przeglądarek robi to właściwie (sprawdzanie zakładek lub cokolwiek innego). – Janning

Odpowiedz

2

W obecnym sprężyna (4.3.10) HEAD rozwiązywane są automatycznie: Metody

@RequestMapping odwzorowane na "GET" są również niejawnie mapowane na "HEAD", tj. nie ma potrzeby jawnego deklarowania "HEAD". Żądanie HTTP HEAD o numerze jest przetwarzane tak, jakby było HTTP GET z wyjątkiem zamiast zapisywania treści tylko liczba bajtów jest zliczana i zestaw nagłówków "Content-Length".

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-head-options

12

Wystarczy dodać HEAD jako obsługiwanej metody do mapowania żądanie:

@RequestMapping(method = {RequestMethod.GET, RequestMethod.HEAD}) 

Aktualizacja: Myślę, że można zapewnić niestandardowej klasy, która rozciąga AnnotationMethodHandlerAdapter być teleskopowa sposób (w dispatcher-servlet.xml), i po prostu ominąć HEAD wsparcie tam sprawdzić. Ale użyłbym tylko funkcji zamiany IDE, aby go dodać.

+0

Przepraszam, powinienem był wspomnieć, że to rozwiązanie jest już znane. Ale nie lubię dodawać go kilkaset razy. Nie jest to coś, co określiłem jako "eleganckie rozwiązanie". Ale dziękuję za odpowiedź. – Janning

+0

@Janning patrz zaktualizowany – Bozho

+1

Z pewnością naruszyłoby to specyfikację, która stwierdza, że ​​"Metoda HEAD jest identyczna z GET, z tym że serwer NIE POWINIEN zwracać treści wiadomości w odpowiedzi."? – hoipolloi

Powiązane problemy