springboot-web-请求处理-restful风格请求

原先的requestmapping以及拓展的

  • @GetMapping
  • @PostMapping
  • @PutMapping   等价于(@RequestMapping(value = "xxx",method = RequestMethod.PUT))
  • @DeleteMapping 等价于(@RequestMapping(value = "xxx",method = RequestMethod.DELETE))

  代码如下:

@GetMapping("/user")
public String getUser(){
return "GET-张三";
}

@PostMapping("/user")
public String saveUser(){
return "POST-张三";
}


@RequestMapping(value = "/user",method = RequestMethod.PUT)
public String putUser(){
return "PUT-张三";
}


@RequestMapping(value = "/user",method = RequestMethod.DELETE)
public String deleteUser(){
return "DELETE-张三";
}

  前台请求页面

  因为我们前台请求也的form表单只有get 和 post两种请求。所以我们目前只能实现get 是get提交,post,delete,put都是post提交

<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 value="REST-DELETE 提交" type="submit"/>
</form>

<form action="/user" method="post">
    <input value="REST-PUT提交"type="submit" />
<form>

  springboot中提供了核心Filter;HiddenHttpMethodFilter(post请求)

  这个可以给我们提供隐藏域【_method】

  1.修改配置文件,开启这个HiddenHttpMethodFilter

spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: true

 

  2.我们改造前台页面

  我们给隐藏域_method赋值 并隐藏

  

 

 

  3.后台请求@RequestMapping注解就可以识别了

  4.Rest原理(表单提交要使用REST的时候)

 

    表单提交会带上_method=PUT
    请求过来被HiddenHttpMethodFilter拦截
    请求是否正常,并且是POST
    获取到_method的值。
    兼容以下请求;PUT.DELETE.PATCH
    原生request(post),包装模式requesWrapper重写了getMethod方法,返回的是传入的值。
    过滤器链放行的时候用wrapper。以后的方法调用getMethod是调用requesWrapper的。

  5.Rest使用客户端工具。

    如PostMan可直接发送put、delete等方式请求

  6.

 

posted @ 2022-01-22 22:36  qwedfrgh  阅读(108)  评论(0)    收藏  举报