2010-09-27 14 views
16

geçenlerde böyle ele 3,0 Kontrolörü bahar taşındı İstekleri. Ben HEAD desteklemek istiyoruzBahar 3,0 BAŞ

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

GET Talepleri gibi aynı şekilde İstekleri, ama tabii ki, HTTP referansı uyarak:

BAŞ yöntemi sunucu
gerekmemesi dışında GET ile aynıdır Yanıtta bir ileti gövdesini döndür. HTTP üstbilgileri, HEAD isteğine yanıt olarak verilen metainformation, bir GET isteğine yanıt olarak gönderilen bilgisiyle aynı olmalıdır. Bu metot, ile ilgili varlığın elde edilmesi için 'un, varlık-gövdesi 'un kendisinin transfer edilmesine gerek olmaksızın, talebi ile ima edilen varlığı elde etmek için kullanılabilir. Bu yöntem, geçerliliği, erişilebilirlik ve son modifikasyonu için hipermetin bağlantılarını sınamak amacıyla sık sık kullanılır. http://www.ietf.org/rfc/rfc2616.txt

herkes zarif bir çözümü vardır ya out-of-the-box bile bir yay çözümü var mı?

Web'de arama yaptım, ancak buna bir cevap bulamadım.

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

Güncelleme: Sadece (dispatcher-servlet.xml yılında) yöntemi işleyicisi olma AnnotationMethodHandlerAdapter uzanan özel bir sınıf sağlayabilir düşünüyorum ve bypass

+0

? Bu, istemci veya istemci tarafı kodunda (Javascript) yanlış yapılandırma olabilir mi? Soruyorum çünkü genellikle HEAD, tarayıcı için güncelleme yapılabilmesi için sayfadaki güncellemeleri kontrol etmeyi amaçlamaktadır (yani, Cache-Control/LastModified üstbilgileri). – AngerClown

+0

PycURL bir istek yöntemi yapar = yapmak için kafa alır. Genellikle, bu gibi çok arama motorları için çok normal olduğunu bulduk: oneriot.com, ask.com vb .. –

+4

hangi aletin KAFA İsteği yaptığını önemser. Bu geçerli bir HTTP İsteği ve birçok tarayıcı aslında yapıyor (yer imleri veya herhangi bir şekilde). – Janning

cevap

2

(4.3.10) BAŞ otomatik desteklenir:

@ RequestMapping yöntemleridir "GET" eşleştirilir Ayrıca, örtülü olarak "HEAD" ile eşlenmiştir, yani "HEAD" açık bir şekilde bildirilmeye gerek yoktur. Bir HTTP HEAD isteği, dışında bir HTTP GET olsaydı, yalnızca bayt sayılır ve "Content-Length" başlık kümesi yazılıyormuş gibi işlenir.

BAŞ istekleri yaptığını Ne

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

12

Sadece desteklenen bir yöntem olarak istek eşlemesi HEAD eklemek KAFA desteği orada kontrol edin. Ama eklemek için sadece IDE'nin değiştirme özelliklerini kullanıyorum.

+0

Üzgünüm, bu çözümün zaten bilindiğinden bahsetmeliydim. Ama birkaç yüz kere eklemek istemiyorum. Bu, "zarif bir çözüm" olarak adlandırdığım şey değil. Ama cevabın için teşekkürler. – Janning

+0

@Janning Güncellenmiş – Bozho

+1

Şüphesiz bu durum, sunucunun yanıtta bir ileti gövdesi döndürmemesi dışında, HEAD yönteminin GET ile aynı olduğunu belirten belirtimi ihlal eder. '? – hoipolloi