Spring 3.0 HEAD Запросы - PullRequest
       22

Spring 3.0 HEAD Запросы

17 голосов
/ 27 сентября 2010

недавно мы перешли на Spring 3.0 Обработка контроллера так:

@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
   }
}

Теперь мы получаем множество исключений в наших журналах из-за запросов HEAD.

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)
    ...

Я бы хотелподдерживать запросы HEAD так же, как запросы GET, но, конечно, подчиняясь HTTP-ссылке:

Метод HEAD идентичен GET, за исключением того, что сервер НЕ ДОЛЖЕН
возвращать тело сообщения вответ.Метаинформация, содержащаяся в заголовках HTTP в ответ на запрос HEAD, ДОЛЖНА быть идентична информации, отправленной в ответ на запрос GET.Этот метод может использоваться для получения метаинформации о сущности, подразумеваемой запросом, без передачи самого тела сущности.Этот метод часто используется для проверки гипертекстовых ссылок на валидность, доступность и последние изменения.http://www.ietf.org/rfc/rfc2616.txt

У кого-нибудь есть изящное решение или есть даже весеннее решение из коробки?

Я искал в Интернете, но не нашел ответов на вопросыэто.

Ответы [ 3 ]

21 голосов
/ 16 июля 2011

Я считаю, что это то, что вы ищете: http://www.axelfontaine.com/2009/09/transparently-supporting-http-head.html

14 голосов
/ 27 сентября 2010

Просто добавьте HEAD в качестве поддерживаемого метода для отображения запроса:

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

Обновление: я думаю, что вы можете предоставить собственный класс, который расширяет AnnotationMethodHandlerAdapter, чтобы быть обработчиком метода (в dispatcher-servlet.xml), и просто обойти проверку поддержки HEAD там. Но я бы просто использовал функции замены в IDE, чтобы добавить его.

6 голосов
/ 31 июля 2017

В текущей версии Spring (4.3.10) автоматически поддерживается HEAD:

@ Методы RequestMapping, сопоставленные с «GET», также неявно сопоставляются с «HEAD», т. Е. Нет необходимости иметь«ГОЛОВА» явно объявлена.Запрос HTTP HEAD обрабатывается так, как если бы он был HTTP GET, за исключением того, что вместо записи тела учитывается только количество байтов и устанавливается заголовок «Content-Length».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...