Usando métodos PUT y DELETE en Spring MVC

Estoy intentando usar RequestMethod.PUT y RequestMethod.DELETE en Spring MVC controller (versión 3.0.2). Hay tres métodos asignados con una URL en la clase de controlador Spring de la siguiente manera (PUT, GET y POST, respectivamente, solo para fines de demostración).

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

Cuando se carga la página, se invoca el método GET como obvio, pero en todos los demás casos (cuando se envía la página), el único método que se invoca es POST , nunca se invoca el método designado con RequestMethod.PUT .


El formulario de Spring contiene solo un botón de enviar y un navegador de imágenes como,

 

El HTML generado es el siguiente,

 

En mi spring-config.xml ( dispatcher-servlet.xml en mi caso), he agregado una referencia a CommonsMultipartResolver :

  

y en mi archivo web.xml , HiddenHttpMethodFilter está configurado de la siguiente manera,

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

El método PUT (y DELETE también) nunca se invoca (sin excepción ni error). ¿Que me estoy perdiendo aqui?


Actualización:

Con la siguiente configuración en web.xml ,

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

arroja la siguiente excepción.

org.springframework.beans.factory.NoSuchBeanDefinitionException: no se define ningún bean con el nombre ‘filterMultipartResolver’

Donde el asignador de nombre es el nombre del servlet – org.springframework.web.servlet.DispatcherServlet ya mapeado en web.xml de la siguiente manera.

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

No estoy seguro de qué más se necesita? ¿Es necesario el filtro HiddenHttpMethodFilter para implementar en nuestro propio OncePerRequestFilter algo así como el que se muestra aquí ? (es una clase incorporada)

Los puntos importantes se enumeran aquí .

La mayoría de los navegadores no admiten action=PUT en formularios HTML. Simplemente enviarán solicitudes POST lugar. El HiddenHttpMethodFilter te ayudará a solucionar el problema, pero debes incluir un campo oculto _method=PUT en tu formulario. Si usa el resorte: form taglib esto se hará automáticamente, pero su ejemplo parece usar HTML simple.

La NoSuchBeanDefinitionException es probablemente un problema no relacionado.

Deberías cambiar tu configuración.

 /* 

a

 [dispatch servlet name] 
    Intereting Posts