当前位置 博文首页 > blackball1998的博客:RESTful风格

    blackball1998的博客:RESTful风格

    作者:[db:作者] 时间:2021-06-20 09:06

    RESTful风格

    我们在对一个数据进行增删改查操作时,按照传统的方式需要定义四个接口,来接收增删改查这四种不同的请求。设想一下,如果我们有一个用户信息需要增删改查,就需要/addUser,/delectUser,/updateUser,/queryUser四个不同的uri,这样做未免过于繁琐,而且每次都需要给不同的uri起不同的名字也不容易,这个时候我们可以使用RESTful风格的API

    RESTful风格定义

    首先我们看一下RESTful风格的定义

    REST,即Representational State Transfer的缩写。直接翻译的意思是"表现层状态转化"。

    它是一种互联网应用程序的API设计理念:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

    RESTful风格定义了一系列的请求类型,简单的和增删改查的对应关系如下

    CRUD 动作HTTP 方法
    CreatePOST
    QueryGET
    UpdatePUT或PATCH
    DeleteDELETE

    使用了RESTful风格,我们只需要一个/user的uri就足够了,RESTful风格的API可以使用同样的uri,而用不同的请求类型来对数据做不同的操作,而这在Spring MVC中也可以实现

    @RequestMapping的method属性

    @RequestMapping中有一个method属性,我们可以通过设置这个属性来绑定这个接收请求的方法接收的是什么类型的请求

    @RestController
    public class MyController {
    
        @RequestMapping(path = "/user", method = RequestMethod.GET)
        public String queryUser() {
            return "queryUser";
        }
    
        @RequestMapping(path = "/user", method = RequestMethod.POST)
        public String createUser() {
            return "createUser";
        }
    }
    

    设置method属性时使用RequestMethod这个枚举类的值

    这里定义了两个方法,这两个方法都使用/user这个uri,然而这并不冲突,前端的请求如果是GET类型的,就会执行queryUser方法,如果是POST类型的,就会执行updateUser方法

    我们使用postman这个工具来帮助我们发送不同的请求,测试返回的结果

    在这里插入图片描述

    在这里插入图片描述

    从不同的结果可以看出,两次请求分别走了不同的请求处理方法

    @RequestMapping衍生注解

    除了使用@RequestMapping的method属性,还可以使用@RequestMapping注解的衍生注解来指定接收请求方法接收的请求类型,有以下几个衍生注解

    • @GetMapping
    • @PostMapping
    • @DeleteMapping
    • @PatchMapping
    • @PutMapping

    使用这些衍生注解,就不需要使用@RequestMapping注解了,点开可以发现这些衍生注解相当于设置了method属性的@RequestMapping注解

    在这里插入图片描述

    @RestController
    public class MyController {
    
        @GetMapping("/user")
        public String queryUser() {
            return "queryUser";
        }
    
        @PostMapping("/user")
        public String createUser() {
            return "createUser";
        }
    }
    

    表单提交使用RESTful风格

    在表单提交中,只有GET和POST两种请求,不过这种情况可是可以使用RESTful风格的,只需要遵循Spring Boot的规范就行

    例如我们现在要发送一个请求类型为DELETE的请求,表单元素的method属性还是写post,然后在表单中添加一个input元素,一般是hidden类型的,然后元素名命名为_method,值绑定真正的请求类型即可,这个value属性的DELETE不分大小写

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Index</title>
    </head>
    <body>
    <form action="/user" method="post">
        <input type="hidden" name="_method" value="delete">
        <input type="submit" value="删除">
    </form>
    
    </body>
    </html>
    

    然后在配置文件中使用以下配置将Spring MVC的表单过滤器功能打开

    spring:
      mvc:
        hiddenmethod:
          filter:
            enabled: true
    

    这样表单发送的请求虽然原生是POST类型的,但是Spring MVC会当成DELETE类型处理

    下一篇:没有了