REST:即Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用.
1.HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种
基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。
2.实例传统的请求方法: ? ? Rest风格
getBook?id=1 GET ? ? ? ? ? ? ?/book/1 HTTP GET:得到id=1的book
delete?id=1 GET ? ? ? ? ? ? ? ? /book/1 HTTP DELETE:删除id=1的book
update POST ? ? ? ? ? ? ? ? ? ? ?/book/1 HTTP PUT:更新id=1的book
add POST ? ? ? ? ? ? ? ? ? ? ? ? ? /book HTTP POST:新增book
(注意这里的/book/1并没有说属性名是book,?rest这里强调的是 http请求的四个动作get,post,delte,put)
Rest的nl请求风格是目前比较流行的方式,他使用不同的请求方式,来区别我们的操作类型,比如GET请求,就表示查询,用POST请求就表示添加,用PUT请求就表示更新,用DELETE方式请求,就表示删除。
目前的浏览器支持GET和POST方式,如果我们希望以PUT方式和DELETE方式请求,就需要转换。|
1)当前的浏览器只支持post/get请求,因此为了得到put/delete的请求方式需要使用Spring提供的HiddenHttpMethodFilter过滤器进行转换.
?
(2)HiddenHttpMethodFilter:浏览器form表单只支持GET与POST 请求,而DELETE、PUT等method并不支持,Spring3.0添加了一个过滤器,可以将这些请求换为标准的http方法,使得支持GET、POST、PUT与DELETE请求。
?
(3)HiddenHttplMethodFilter只能对post请求方式进行转换,因此我们需要特别的注意这一点
?
(4)这个过滤器需要在web.xml中配置
(5)画出原理示意图
l
示例:
1、在@RequestMapping指定?页面请求必须是delete
//删除【delete】
@RequestMapping(value = "/book/{id}",method = RequestMethod.DELETE)
public String deleteBook() {
System.out.println("删除书籍");
return "bookOK";
}
2、请注意隐藏域,name值务必为"_method"(spring底层写死,前提使用的是
HiddenHttpMethodFilter(但是该过滤器现在在springboot2.*开始已经弃用,使用webflux注解来进行post提交的delete、put请求的转换))
<%-- 为了配合将get转为delete,需要加一个隐藏表单--%>
<form action="user/book/300" method="post" id = "hiddenform">
<input type="hidden" name="_method" value="delete">
<input type="submit" name="删除书籍">
</form>
3、在web.xml配置
<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>
</filter-mapping>
4、tomcat8以上可能,使用该方法可以执行到目标方法,但是跳转时发生405错误,解决方式可以在jsp页面中,添?isErrorPage=?true(发生错误,可以仍然跳转)