2010-09-27 14 views
16

Recientemente se trasladó a la primavera 3,0 manejar como este controlador:Spring 3.0 CABEZA Pide

@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 un montón de excepciones en nuestros registros a causa de peticiones 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 apoyar las solicitudes HEAD de la misma manera como las solicitudes GET, pero obedeciendo a la referencia HTTP, por supuesto:

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

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

Realicé búsquedas en la web pero no encontré ninguna respuesta a esto.

+0

Lo que está haciendo las peticiones HEAD? ¿Podría ser una configuración errónea en el cliente o el código del lado del cliente (Javascript)? Lo estoy preguntando porque generalmente HEAD está destinado a buscar actualizaciones de la página (es decir, encabezados Cache-Control/LastModified) para que el navegador pueda actualizarse. – AngerClown

+0

PycURL hace un método de solicitud = head para hacer gets. Por lo general, he encontrado que esto es muy normal para los motores de búsqueda de lotes como: oneriot.com, ask.com, etc. –

+4

a quién le importa qué herramienta está haciendo HEAD Request. Es una solicitud HTTP válida y muchos navegadores lo están haciendo en realidad (marcando marcadores o lo que sea). – Janning

Respuesta

2

En la primavera actual (4.3.10) cabeza se apoya de forma automática: métodos

@RequestMapping asignan a "GET" son también implícitamente mapeado a "HEAD", es decir, no es necesario que se declare explícitamente "HEAD". Una solicitud HTTP HEAD se procesa como si fuera un HTTP GET excepto en lugar de escribir en el cuerpo solo el número de bytes contados y el conjunto de encabezado "Content-Length".

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

12

Sólo tiene que añadir HEAD como método apoyado el mapeo solicitud:

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

Actualización: Creo que se puede proporcionar una clase personalizada que se extiende AnnotationMethodHandlerAdapter ser el controlador de métodos (en dispatcher-servlet.xml), y acaba de pasar por alto la HEAD soporte comprobar allí. Pero simplemente usaría las funciones de reemplazo de un IDE para agregarlo.

+0

Lo siento, debería haber mencionado que esta solución ya es conocida. Pero no me gusta agregarlo unos cientos de veces. Esto no es lo que me refería como una "solución elegante". Pero gracias por tu respuesta. – Janning

+0

@Janning see updated – Bozho

+1

Seguramente esto violaría la especificación que establece que 'El método HEAD es idéntico a GET, excepto que el servidor NO DEBE devolver un mensaje-cuerpo en la respuesta'. – hoipolloi

Cuestiones relacionadas