http spring spring-mvc controller httprequest

http - Spring 3.0 HEAD Requests



grails spring security (3)

Recientemente pasamos a la versión 3.0 del controlador Spring como:

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

Ahora estamos recibiendo muchas excepciones en nuestros registros debido a las solicitudes 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) ...

Me gustaría admitir las solicitudes HEAD de la misma manera que las solicitudes GET, pero obedeciendo la referencia HTTP, por supuesto:

El método HEAD es idéntico al GET, excepto que el servidor NO DEBE
Devuelve un mensaje-body en la respuesta. La metainformación contenida en los encabezados HTTP en respuesta a una solicitud HEAD DEBE ser idéntica a la información enviada en respuesta a una solicitud GET. Este método se puede usar para obtener información sobre la entidad implícita en la solicitud sin transferir el propio cuerpo de la entidad. Este método se utiliza a menudo para probar la validez de los enlaces de hipertexto, la accesibilidad y la modificación reciente. http://www.ietf.org/rfc/rfc2616.txt

¿Alguien tiene una solución elegante o hay incluso una solución de resorte fuera de la caja?

Busqué en la web pero no encontré ninguna respuesta a esto.



En la primavera actual (4.3.10) HEAD se admite automáticamente:

Los métodos de @RequestMapping asignados a "GET" también se asignan implícitamente a "HEAD", es decir, no es necesario que se haya declarado explícitamente "HEAD". Una solicitud HTTP HEAD se procesa como si fuera un HTTP GET, excepto que en lugar de escribir el cuerpo, solo se cuenta el número de bytes y se establece el encabezado "Content-Length".

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


Solo agregue HEAD como método soportado en la asignación de solicitud:

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

Actualización: creo que puede proporcionar una clase personalizada que amplíe AnnotationMethodHandlerAdapter para que sea el controlador de métodos (en dispatcher-servlet.xml ), y simplemente dispatcher-servlet.xml la verificación de soporte HEAD allí. Pero solo usaría las funciones de reemplazo de un IDE para agregarlo.