• SpringBoot Web开发----请求参数处理


    请求参数处理

    请求映射与Rest原理

    在这里插入图片描述

    • xxxMapping;
    • Rest风格
      以前
      /getUser 获取用户
      /deleteUser 删除用户
      /editUser 修改用户
      /saveUser 保存用户
      现在
      /user
      GET-获取用户
      DELETE-删除用户
      PUT-修改用户
      POST-保存用户
      我们先写一个简单的映射请求

    controller包里的:

    @RestController
    public class HelloController {
    	@RequestMapping(value = "/user",method = RequestMethod.GET)
    	 public String getUser(){
    	     return "GET-张三";
    	 }
    	 @RequestMapping(value = "/user",method = RequestMethod.POST)
    	 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-张三";
    	 }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    index.html里面写一个简单的表单提交:

    	<form action="/user" method="get">
            <input type="submit" value="REST-GET">
        </form>
        <form action="/user" method="post">
            <input type="submit" value="REST-POST">
        </form>
        <form action="/user" method="put">
            <input type="submit" value="REST-PUT">
        </form>
        <form action="/user" method="delete">
            <input type="submit" value="REST-DELETE">
        </form>
        <hr>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    项目启动后:

    在这里插入图片描述

    当我门去点击各自的表单提交时,会发现put和delete的方法没有返回我们预期的结果
    当我们点击REST-GET时,返回 GET-张三
    当我们点击REST-POST时,返回 POST-张三
    当我们点击REST-PUT时,返回 GET-张三
    当我们点击REST-DELETE时,返回 GET-张三
    原因是我们在SpringBoot的表单提交里写的不支持put和delete方法,默认会返回get

    在这里插入图片描述

    解决方法:
    1.index.html 在form表单里先去修改代码

    原来的代码:

    	<form action="/user" method="put">
            <input type="submit" value="REST-PUT">
        </form>
        <form action="/user" method="delete">
            <input type="submit" value="REST-DELETE">
        </form>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改后的代码:

    	<form action="/user" method="post">
    		<!-- 将post隐藏起来,真正的指向的方法是put -->
            <input type="hidden" name="_method" value="put">
            <input type="submit" value="REST-PUT">
        </form>
        <form action="/user" method="post">
        	<!-- 将post隐藏起来,真正的指向的方法是delete-->
            <input type="hidden" name="_method" value="delete">
            <input type="submit" value="REST-DELETE">
        </form>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.而我们想要使用REST风格,就得在SpringBoot中手动开启(yml文件中进行配置)
    开启页面表单的Rest功能(选择性开启,前后端分离要使用)

    spring:
    	mvc:
    	 hiddenmetnod:
    	  filter:
    	   enable: true
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后再次启动项目,去点击表单提交:
    当我们点击REST-GET时,返回 GET-张三
    当我们点击REST-POST时,返回 POST-张三
    当我们点击REST-PUT时,返回 PUT-张三
    当我们点击REST-DELETE时,返回 DELETE-张三
    此时我们的put和delete就可以使用了.

    表单提交要带上_method=真正请求的参数
    请求过来被 HiddenHttpMethodFilter拦截,

    1.请求是否正常,并且是POST方式,正常的话获取到_method的值
    在这里插入图片描述2.兼容以下请求:put,delete,patch
    3.原生Request是POST方式,包装模式RequesWrapper重写了getMethod方法.返回的是传入的值(_method)
    4.过滤器放行的是wrapper。以后的方法调用getMethod是调用的requesWrapper

    Rest使用客户端工具

    • 如PostMan直接发送put,delete等方式,无需Filter

    SpringMVC里面派生了一些新的注解,大大简化了上述controller里面的代码

    @RequestMapping(value = "/user",method = RequestMethod.GET)
    相当于  @GetMapping("/user")
    @RequestMapping(value = "/user",method = RequestMethod.POST)
    相当于  @PostMapping("/user")
    @RequestMapping(value = "/user",method = RequestMethod.PUT)
    相当于  @PutMapping("/user")
    @RequestMapping(value = "/user",method = RequestMethod.DELETE)
    相当于  @DeleteMapping("/user")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    LabVIEW检测润滑油中的水分和铁颗粒
    TCL基础入门
    Oracle-分组统计查询
    6.vue知识点:vue-directive自定义指令
    从零开始写 Docker(四)---使用 pivotRoot 切换 rootfs 实现文件系统隔离
    02_SpingBoot 入门案例
    Llama - 微调
    mac apktool安装
    Thread的基本用法
    Python基础——函数(一)
  • 原文地址:https://blog.csdn.net/weixin_47278183/article/details/126610477