springMVC-Restful风格

发布时间:2023年12月19日

基本介绍

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方式请求,就需要转换。|

Rest核心过滤器

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(发生错误,可以仍然跳转)

文章来源:https://blog.csdn.net/qq_36684207/article/details/134964306
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。