Rest风格请求

一、介绍

  • 传统方式请求:/getUser,/delUser,/saveUser
  • REST方式:全部是/user请求,根据请求方式判断具体操作,获取用户:GET,删除用户:DELETE,修改用户:PUT,保存用户:PUT
  • 核心在于HiddenHttpMethodFilter
    • 用法:表单form中method=post,隐藏发送一个参数"_method="(参数的值根据不同的操作可以是put、delete等)
    • springboot中手动开启 spring:mvc.hiddenmethod.filter.enabled=true
    • 表单提交使用rest时原理(使用客户端如postman时不需要该步骤)
      • 表单提交时附带参数:_method=put/delete
      • 请求会被HiddenHttpMethodFilter拦截
      • 判断是否post请求,且正常
      • 获取_method的值(put/delete/patch)
      • 原生request(post),包装模式requestWrapper重写getMethod方法,返回的是传入的值(put/delete/patch)
      • 过滤器链放行的时候用wrapper,以后的方法调用getMethod是调用requestWrapper的
    • 参数"_method"是可以自定义的
      @Configuration(proxyBeanMethods = false)
      public class WebConfig {
          
          @Bean
          public HiddenHttpMethodFilter hiddenHttpMethodFilter(){
              HiddenHttpMethodFilter methodFilter = new HiddenHttpMethodFilter();
              //自定义rest风格表单附带参数为"_rqm"
              methodFilter.setMethodParam("_rqm");
              return methodFilter;
          }
      }

二、实践

  1. 开启过滤器
    spring:
      mvc:
        hiddenmethod:
          filter:
            enabled: true  #开启rest风格过滤器
  2. 表单
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Welcome</title>
    </head>
    <body>
    Hello,boot!<br>
    
    测试rest风格:
    <form action="/user" method="get">
        <input value="REST-GET 提交" type="submit"/>
    </form>
    <form action="/user" method="post">
        <input value="REST-POST 提交" type="submit"/>
    </form>
    <form action="/user" method="post">
        <input name="_method" type="hidden" value="put"/>
        <input value="REST-PUT 提交" type="submit"/>
    </form>
    <form action="/user" method="post">
        <input name="_method" type="hidden" value="delete"/>
        <input value="REST-DELETE 提交" type="submit"/>
    </form>
    </body>
    </html>

  3. controller
    @RestController
    public class UserController {
    
    
        /**
         * @Description rest风格的两种写法
         * @Date 0:09 2021/10/12
         * @Param []
         * @return java.lang.String
         */
        // @RequestMapping(value = "/user", method = RequestMethod.GET)
        @GetMapping(value = "/user")
        public String getUser(){
            return "GET_tom";
        }
    
        @PostMapping(value = "/user")
        public String saveUser(){
            return "POST_tom";
        }
    
        @PutMapping(value = "/user")
        public String putUser(){
            return "PUT_tom";
        }
    
        @DeleteMapping("/user")
        public String deleteUser(){
            return "DELETE_tom";
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值