由于浏览器form表单只支持GET和POST请求方式,而DELETE、PUT的请求方式并不支持,不过SPring3.0后添加了一个过滤器HiddenHttpMethodFilter,可以将浏览器请求修改为指定的请求方式,发送给控制器,使得请求方式可以支持DELETE和PUT两种请求方式。
具体实现步骤如下:
1、在web.xml中配置过滤器
2、form表单的请求方式必须是post请求
3、在form表单中提供<input type="hidden" name="_method" value="请求方式"/>,并按照要求提供_method请求参数,该参数就是我们需要的请求方式
先看下HiddenHttpMethodFilter的源码:
1、在web.xml中配置过滤器,一定要配置<servlet-name>
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
<servlet-name>mcpMvc</servlet-name>
</filter-mapping>
2、编写相应的jsp页面:
< !-- 保存 -->
<form action="springmvc/testRequestPost" method="post">
用户名称:<input type="text" name="username" /><br/>
<input type="hidden" name="_method" value="POST"><br/>
<input type="submit" value="保存"/>
</form>
<hr/>
<!-- 删除 -->
<form action="springmvc/testRequestDelete/1" method="post">
<input type="hidden" name="_method" value="DELETE"/><br/>
<input type="submit" value="删除"/>
</form>
<hr/>
<!-- 更新 -->
<form action="springmvc/testRequestPut/1" method="post">
用户名称:<input type="text" name="username" /><br/>
<input type="hidden" name="_method" value="PUT"/><br/>
<input type="submit" value="更新"/>
</form>
<hr/>
<!-- 获取 -->
<form action="springmvc/testRequestGet/1" method="post">
<input type="hidden" name="_method" value="GET"/><br/>
<input type="submit" value="获取"/>
</form>
3、Controller类,需要注意的是在使用DELETE及PUT请求是,要添加@RequestBody注解
@Controller
@RequestMapping("/springmvc")
public class SprinvmvcAnnotationTest {
/**
* 分别使用http请求中的get put post delete请求方式来交互
*/
@RequestMapping(value="/testRequestPost",method=RequestMethod.POST)
public String testPost(User1 user){
System.out.println("rest post "+user);
return "success";
}
@RequestMapping(value="/testRequestDelete/{id}",method=RequestMethod.DELETE)
@ResponseBody
public String testDelete(@PathVariable(value="id",required=true)Integer id){
System.out.println("rest delete "+id);
return "success";
}
@RequestMapping(value="/testRequestPut/{id}",method=RequestMethod.PUT)
@ResponseBody
public String testPut(@PathVariable(value="id",required=true)Integer id,User1 user){
System.out.println("rest put "+id+" "+user);
return "success";
}
@RequestMapping(value="/testRequestGet/{id}",method=RequestMethod.GET)
public String testGet(@PathVariable(value="id",required=true)Integer id){
System.out.println("rest get "+id);
return "success";
}
}
最后在浏览器中输入相应的值,得到的结果如下所示: