IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot六:获取请求参数汇总 -> 正文阅读

[Java知识库]SpringBoot六:获取请求参数汇总

获取请求参数汇总

导读

  1. 通过前面对JavaWEB和SpringMVC的学习,有通过servletAPI的,也有通过注解的

  2. 分为五类

    ① 注解

    ② Servlet原生API

    ③ 复杂参数

    ④ 实体类映射

    ⑤ 方法参数名与请求中的参数名保持一致

一、注解

  1. 获取参数的注解汇总表
    注解使用场景
    1@PathVariable作用于RestFul风格的请求,标注在对应的方法参数前
    可以获取单个参数,也可以获取所有参数的Map
    2@RequestHeader获取请求头
    3@RequestParam对普通风格请求中参数的获取,即queryString查询字符串
    4@CookieValue有的请求可能没有cookie,会报错
    5@RequestBody只有post请求有请求体
    6@RequestAttribute和@RequestParam用法一样,
    用于获取存在request作用域中的数据
  2. @PathVariable测试

    可以获取单个参数,也可以获取所有参数的Map

    html

    <a href="/car/2/owner/zhangsan">获取请求参数测试</a>
    

    controller

    @RestController
    public class ParamsTestController {
        @GetMapping("/car/{id}/owner/{username}")
        public Map<String,Object> restfulTest(@PathVariable("id") Integer id,
                                              @PathVariable("username") String username,
                                              @PathVariable Map<String,String> pv) {
            Map<String, Object> map = new HashMap<>();
            map.put("id",id);
            map.put("username",username);
            map.put("pv",pv);
            return map;
        }
    }
    

    Browser响应结果

    在这里插入图片描述

  3. @RequsetHeader测试

    html

    <a href="/car/2/owner/zhangsan">获取请求参数测试</a>
    

    controller

    @RestController
    public class ParamsTestController {
        @GetMapping("/car/{id}/owner/{username}")
        public Map<String,Object> restfulTest(
                                           @RequestHeader("User-Agent") String userAgent,
                                           @RequestHeader Map<String,String> rh
        ) {
            Map<String, Object> map = new HashMap<>();
            map.put("userAgent",userAgent);
            map.put("rh",rh);
            return map;
        }
    }
    
    

    Browser响应结果

    在这里插入图片描述

  4. @RequestParam测试

    对普通风格请求中参数的获取

    html

    <a href="/car/2/owner/zhangsan?age=18&inters=basketball&inters=game">获取请求参数测试</a>
    

    controller

    @RestController
    public class ParamsTestController {
        @GetMapping("/car/{id}/owner/{username}")
        public Map<String,Object> restfulTest(
                                              @RequestParam("age") Integer age,
                                              @RequestParam Map<String,String> rp
        ) {
            Map<String, Object> map = new HashMap<>();
            map.put("age",age);
            map.put("rp",rp);
            return map;
        }
    }
    

    Browser响应结果

    在这里插入图片描述

  5. @CookieValue测试
    @RestController
    public class ParamsTestController {
        @GetMapping("/car/{id}/owner/{username}")
        public Map<String,Object> restfulTest(
                                              @CookieValue("_ga") String _ga,
                                              @CookieValue Cookie cookie
                                              ) {
            Map<String, Object> map = new HashMap<>();
            map.put("_ga",_ga);
            map.put("cookie",cookie);
            return map;
        }
    }
    

二、矩阵变量@MatrixVariable

  1. 书写规则
    <a href="/car/sell;low=34;brand=byd,audi,yd">获取请求参数测试</a>
    <a href="/car/sell;low=34;brand=byd;brand=audi;brand=yd">获取请求参数测试</a>
    <a href="/boss/1;age=20/2;age=10">获取请求参数测试</a>
    
  2. SpringBoot对矩阵变量默认是不生效的

    SpringBoot的web场景的底层是SpringMVC,SpringMVC的自动配置组件WebMvcAutoConfiguration中路径匹配配置方法中,调用了调用了UrlPathHelper对象

    public void configurePathMatch(PathMatchConfigurer configurer) {
        // 此处省略了部分源码
        if (servletUrlMapping.equals("/") && this.singleDispatcherServlet()) {
            // 调用了UrlPathHelper对象
            UrlPathHelper urlPathHelper = new UrlPathHelper();
            urlPathHelper.setAlwaysUseFullPath(true);
            configurer.setUrlPathHelper(urlPathHelper);
        }
    
        });
    }
    

    在UrlPathHelper类中,有一个属性是removeSemicolonContent=true,因为其作用是移除分号后的内容,故无法匹配矩阵变量

  3. 如何可以识别矩阵变量

    需要更改SpringMVC的配置,需要让自己创建的配置类实现 WebMvcConfigurer接口,然后重写configurePathMatch方法,设置removeSemicolonContent=false,并重置UrlPathHelper

    @Configuration(proxyBeanMethods = false)
    public class MyConfig implements WebMvcConfigurer {
        @Override
        public void configurePathMatch(PathMatchConfigurer configurer) {
            UrlPathHelper urlPathHelper = new UrlPathHelper();
            // 矩阵变量才能生效
            urlPathHelper.setRemoveSemicolonContent(false);
            configurer.setUrlPathHelper(urlPathHelper);
        }
    }
    
  4. 获取矩阵变量的controller
    @RestController
    public class MatrixTest {
        // 针对该方式的矩阵变量<a href="/cars/sell;low=34;brand=byd,audi,yd">获取参数测试</a>
        @GetMapping("/cars/{path}")
        public Map<String,Object> matrixTest(
                @MatrixVariable("low")  Integer low,
                @MatrixVariable("brand") List<String> brand,
                @PathVariable("path") String path) {
            Map<String, Object> map = new HashMap<>();
            map.put("low",low);
            map.put("brand",brand);
            map.put("path",path);
            return map;
        }
        
        // 针对该方式的矩阵变量 <a href="/boss/1;age=20/2;age=10">获取请求参数测试</a>
    	@GetMapping("/boss/{bossId}/{empId}")
        public Map<String,Object> matrixTest1(
                @MatrixVariable(value = "age",pathVar = "bossId")  Integer bossId,
                @MatrixVariable(value = "age",pathVar = "empId")  Integer empId ) {
            Map<String, Object> map = new HashMap<>();
            map.put("bossId",bossId);
            map.put("empId",empId);
            return map;
        }
    }
    
  5. 浏览器响应结果

    在这里插入图片描述

    在这里插入图片描述

三、错误

  1. Required matrix variable ‘path’ for method parameter type String is not present

    在这里插入图片描述

  2. 解决方法

    ① 需要使用{path}来接收矩阵变量类型的请求参数

    ② 路径类型的请求参数需要使用注解@PathVariable

参考资料

  1. SpringMVC三:获取请求参数_e_nanxu的博客-CSDN博客
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:07:52  更:2022-07-17 16:12:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:39:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码