Utilizzo dei metodi PUT e DELETE in Spring MVC

Sto cercando di utilizzare RequestMethod.PUT e RequestMethod.DELETE in Spring MVC controller (versione 3.0.2). Ci sono tre metodi mappati con un URL nella class del controller Spring come segue (rispettivamente PUT, GET e POST, solo a scopo dimostrativo).

 @RequestMapping(method = {RequestMethod.PUT}, value = {"admin_side/Temp"}, headers = {"content-type=multipart/form-data"}) public String update(@ModelAttribute("tempBean") TempBean tempBean, BindingResult error, Map model, HttpServletRequest request, HttpServletResponse response) { if (ServletFileUpload.isMultipartContent(request)) { System.out.println("true"); } System.out.println("Request method PUT"); return "admin_side/Temp"; } @RequestMapping(method = {RequestMethod.GET}, value = {"admin_side/Temp"}) public String showForm(@ModelAttribute("tempBean") TempBean tempBean, BindingResult error, Map model, HttpServletRequest request, HttpServletResponse response) { System.out.println("Request method GET"); return "admin_side/Temp"; } @RequestMapping(method = {RequestMethod.POST}, value = {"admin_side/Temp"}) public String onSubmit(@ModelAttribute("tempBean") TempBean tempBean, BindingResult error, Map model, HttpServletRequest request, HttpServletResponse response) { System.out.println("Request method POST"); return "admin_side/Temp"; } 

Quando la pagina viene caricata, il metodo GET viene invocato come ovvio ma in tutti gli altri casi (quando viene inviata la pagina), l’unico metodo da invocare è POST , il metodo designato con RequestMethod.PUT non viene mai richiamato.


Il modulo Spring contiene solo un pulsante di invio e un browser di immagini come,

 

L’HTML generato è il seguente,

 

Nel mio spring-config.xml ( dispatcher-servlet.xml nel mio caso), ho aggiunto un riferimento a CommonsMultipartResolver :

  

e nel mio file web.xml , HiddenHttpMethodFilter è configurato come segue,

  MultipartFilter org.springframework.web.multipart.support.MultipartFilter  multipartResolverBeanName filterMultipartResolver    MultipartFilter /*   HiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter   HiddenHttpMethodFilter /*  

Il metodo PUT (e DELETE too) non viene mai richiamato (senza eccezioni o errori). Cosa mi manca qui?


Aggiornare :

Con la seguente configurazione in web.xml ,

  MultipartFilter org.springframework.web.multipart.support.MultipartFilter   multipartResolverBeanName filterMultipartResolver    MultipartFilter dispatcher    HiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter   HiddenHttpMethodFilter dispatcher   

getta la seguente eccezione.

org.springframework.beans.factory.NoSuchBeanDefinitionException: nessun bean denominato ‘filterMultipartResolver’ è definito

Dove il nome dispatcher è il nome di Servlet – org.springframework.web.servlet.DispatcherServlet già mappato in web.xml come segue.

  dispatcher org.springframework.web.servlet.DispatcherServlet 2   dispatcher *.htm  

Non sono sicuro di cos’altro è necessario? Il filtro HiddenHttpMethodFilter necessario per implementare sul nostro OncePerRequestFilter estensione proprio qualcosa come quello mostrato qui ? (è una class integrata)

I punti importanti sono elencati qui .

La maggior parte dei browser non supporta action=PUT nei moduli HTML. Invece invieranno richieste POST . HiddenHttpMethodFilter ti aiuterà a risolvere il problema, ma devi includere un campo nascosto _method=PUT nel tuo modulo. Se usi la molla: form taglib questo verrà fatto automaticamente per te, ma il tuo esempio sembra usare un semplice HTML.

NoSuchBeanDefinitionException è probabilmente un problema non correlato.

Dovresti cambiare la tua configurazione.

 /* 

a

 [dispatch servlet name]