SpringBoot2:请求处理原理分析-接口参数的常用注解

news2024/11/24 8:56:39

1、@PathVariable

作用说明:获取路径参数

案例:
接口收参形式:

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

请求传参形式:

http://127.0.0.1:8080/car/3/owner/lisi

返回结果:

{
    "pv": {
        "id": "3",
        "username": "lisi"
    },
    "name": "lisi",
    "id": 3
}

可以用Map<String,String>接收全部路径参数。

2、@RequestHeader

作用说明:获取请求头参数

案例:
接口收参形式:

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

请求传参形式:

http://127.0.0.1:8080/car/3/owner/lisi

返回结果:

{
    "headers": {
        "user-agent": "PostmanRuntime/7.26.8",
        "accept": "*/*",
        "cache-control": "no-cache",
        "postman-token": "7651f635-068b-4fe6-8e26-4990ef714349",
        "host": "127.0.0.1:8080",
        "accept-encoding": "gzip, deflate, br",
        "connection": "keep-alive"
    },
    "userAgent": "PostmanRuntime/7.26.8"
}

可以用Map<String,String>接收全部Header参数。

3、@RequestParam

作用说明:获取请求参数,就是以往的GET请求传参方式。

案例:
接口收参形式:

    @GetMapping("/car/{id}/owner/{username}")
    public Map<String,Object> getCar(
                                     @RequestParam("age") Integer age,
                                     @RequestParam("inters") List<String> inters,
                                     @RequestParam Map<String,String> params
    ){
        Map<String,Object> map = new HashMap<>();
        map.put("age",age);
        map.put("inters",inters);
        map.put("params",params);
        return map;
    }

请求传参形式:

http://127.0.0.1:8080/car/3/owner/lisi?age=18&inters=basketball&inters=game

返回结果:

{
    "inters": [
        "basketball",
        "game"
    ],
    "params": {
        "age": "18",
        "inters": "basketball"
    },
    "age": 18
}

可以用Map<String,String>接收全部GET请求参数参数。

4、@RequestBody

作用说明:获取form表单请求体参数,就是以往的POST请求传参方式。

案例:
接口收参形式:

    @PostMapping("/save")
    public Map postMethod(@RequestBody String content){
        Map<String,Object> map = new HashMap<>();
        map.put("content",content);
        return map;
    }

请求传参形式:

<form action="/save" method="post">
    用户名:<input name="userName"/> <br>
    邮箱:<input name="email"/>
    <input type="submit" value="提交"/>
</form>

返回结果:
在这里插入图片描述
注意:
如果你用postman测试接口。
那么,@RequestBody收参时,对应的传参方式如下:
在这里插入图片描述
如果你想用postman传递form-data参数,就必须要用@RequestParam注解,并且key要对应上。

5、@CookieValue

作用说明:获取cookie参数

案例:
接口收参形式:

    @GetMapping("/car/{id}/owner/{username}")
    public Map<String,Object> getCar(
                                     @CookieValue("_ga") String _ga,
                                     @CookieValue("_ga") Cookie cookie
    ){
        Map<String,Object> map = new HashMap<>();
        map.put("_ga",_ga);
        System.out.println(cookie.getName()+"===>"+cookie.getValue());
        return map;
    }

请求传参形式:

http://127.0.0.1:8080/car/3/owner/lisi?age=18&inters=basketball&inters=game

浏览器添加Cookie
在这里插入图片描述
Postman添加cookie
在这里插入图片描述
返回结果:

{
    "_ga": "123456789"
}

6、@RequestAttribute

作用说明:页面转发时,用于获取request属性。

案例:
接口收参形式:
请求接口

    @GetMapping("/goto")
    public String goToPage(HttpServletRequest request){

        request.setAttribute("msg","成功了...");
        request.setAttribute("code",200);
        return "forward:/success";  //转发到  /success请求
    }

转发接口

    @ResponseBody
    @GetMapping("/success")
    public Map success(@RequestAttribute(value = "msg",required = false) String msg,
                       @RequestAttribute(value = "code",required = false)Integer code,
                       HttpServletRequest request){
        Object msg1 = request.getAttribute("msg");
        Map<String,Object> map = new HashMap<>();
        map.put("reqMethod_msg",msg1);
        map.put("annotation_msg",msg);
        return map;
    }

请求传参形式:

http://127.0.0.1:8080/goto

在这里插入图片描述

返回结果:

{
    "reqMethod_msg": "成功了...",
    "annotation_msg": "成功了..."
}

7、@MatrixVariable

作用说明:获取矩阵参数,如果浏览器禁用了cookie,那么,就用它传递cookie参数。

案例:
开启矩阵参数功能:
在配置类中,向IOC容器注册一个WebMvcConfigurer实例。

    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void configurePathMatch(PathMatchConfigurer configurer) {
                UrlPathHelper urlPathHelper = new UrlPathHelper();
                // 不移除;后面的内容。矩阵变量功能就可以生效
                urlPathHelper.setRemoveSemicolonContent(false);
                configurer.setUrlPathHelper(urlPathHelper);
            }
        };
    }

接口收参形式:

形式1
    //1、语法: 请求路径:/cars/sell;low=34;brand=byd,audi,yd
    //2、SpringBoot默认是禁用了矩阵变量的功能
    //      手动开启:原理。对于路径的处理。UrlPathHelper进行解析。
    //              removeSemicolonContent(移除分号内容)支持矩阵变量的
    //3、矩阵变量必须有url路径变量才能被解析
    @GetMapping("/cars/{path}")
    public Map carsSell(@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;
    }
 
 形式2
    // /boss/1;age=20/2;age=10

    @GetMapping("/boss/{bossId}/{empId}")
    public Map boss(@MatrixVariable(value = "age",pathVar = "bossId") Integer bossAge,
                    @MatrixVariable(value = "age",pathVar = "empId") Integer empAge){
        Map<String,Object> map = new HashMap<>();

        map.put("bossAge",bossAge);
        map.put("empAge",empAge);
        return map;

    }

请求传参形式:

形式1
http://127.0.0.1:8080/cars/sell;low=34;brand=byd,audi,yd
http://127.0.0.1:8080/cars/sell;low=34;brand=byd;brand=audi;brand=yd
形式2
http://127.0.0.1:8080/boss/1;age=20/2;age=10

返回结果:

结果1
{
    "path": "sell",
    "low": 34,
    "brand": [
        "byd",
        "audi",
        "yd"
    ]
}
结果2
{
    "bossAge": 20,
    "empAge": 10
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts圆饼图定时器动画

(function () {const WdxjEcharts echarts.init(document.getElementById(wdxjEchart))let num 0;var imgURL "../imagesNew/wd-center.png";var trafficWay [{name: 火车,value: 20}, {name: 飞机,value: 10}, {name: 客车,value: 30}, {name: 轮渡,value: 40}]…

深入解读Docker核心网络管理:架构、模式与通信机制

在容器化技术中&#xff0c;网络管理是影响容器通信和应用部署的重要组成部分。Docker不仅简化了应用的部署过程&#xff0c;还提供了强大的网络管理功能&#xff0c;确保容器之间以及容器与外部系统的网络通信能够高效、稳定地进行。 本文将深入解读Docker的核心网络管理原理…

查看hprof文件

hprof可以用来分析某个进程的内存情况&#xff0c;对我们分析内存泄漏问题有很大帮助&#xff0c;本文主要记录如何生成及查看hprof文件。 1生成.hprof文件 可以使用adb命令生成 .hprof文件&#xff0c;生成的是在执行命令的那一刻&#xff0c;该进程的内存情况&#xff1a; …

后端Web之SpringBoot原理

目录 1.配置优先级 2.Bean 3.SpringBoot原理 1.配置优先级 SpringBoot中支持三种格式的配置文件: .application.properties、application.yml和application. yaml。它们的配置优先级分别降低。虽然springboot支持多种格式配置文件&#xff0c;但是在项目开发时,推荐统一使用…

视频智能分析平台LntonAIServer安防监控平台花屏检测、马赛克检测功能介绍

视频监控系统在现代社会中扮演着至关重要的角色&#xff0c;无论是用于安全监控、交通管理还是其他用途&#xff0c;视频的质量直接关系到系统的可靠性和有效性。LntonAIServer通过新增的视频质量诊断功能&#xff0c;包括花屏检测和马赛克检测&#xff0c;进一步增强了视频监控…

读书学习进阶笔记 # Datawhale X 李宏毅苹果书 AI夏令营

文章目录 &#x1f6a9;学习目标&#x1f6a9;学习内容&#x1f6a9; Task1.1&#x1f3af;为什么优化会失败&#x1f4cc;因非信息梯度导致的失败 &#x1f3af;局部极小值与鞍点&#x1f3af;临界点及其种类&#x1f3af;如何判断临界值种类&#x1f4cc;更简便的方法来判断 …

Unity教程(十四)敌人空闲和移动的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

MT6895(天玑8100)处理器规格参数_MTK联发科平台方案

MT6895平台 采用台积电5nm工艺&#xff0c;与天玑 8000 相比性能提升 20% &#xff0c;搭载4 个 2.85GHz A78 核心 4 个 2.0GHz A55 核心&#xff0c;CPU能效比上一代提高 25% 。GPU 采用了第三代的Valhall Arm Mali-G610 MC6架构&#xff0c;拥有6核心&#xff0c;搭配天玑81…

ubuntu22.04 qemu 安装windows on arm虚拟机

ubuntu22.04 qemu 安装windows on arm虚拟机 iso: https://uupdump.net/ https://massgrave.dev/windows_arm_links vivo driver: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.262-2/ qemu sudo apt update sudo a…

Java笔试面试题AI答之JDBC(1)

文章目录 1. 什么是JDBC&#xff1f;2. 驱动(Driver)在JDBC中的角色&#xff1f;3. JDBC PreparedStatement比Statement有什么优势&#xff1f;1. 预编译和性能提升2. 参数化查询和安全性3. 更好的可读性和可维护性4. 支持批量操作5. 缓存机制&#xff08;特定数据库环境&#…

【自考zt】【数据结构】【21.10】

【关键字】 数据元素基本单位、抽象数据类型、上三角压缩对称矩阵、排序O&#xff08;n2&#xff09;、不宜链表快排 循环队列入队下标、二叉链表空指针、无相连通图边数差、B树非根结点关键字 链栈无头结点 单链表前二节点和、邻接矩阵度、二叉排序树 一、单选 二、填…

WGCLOUD可以监测交换机的哪些指标数据

WGCLOUD有个模块SNMP监测&#xff0c;可以用于监测交换机、防火墙等设备 监测的指标包括&#xff1a;上行流量&#xff0c;下行流量&#xff0c;每个接口的传输速率&#xff08;包括上行和下行&#xff09;&#xff0c;每个接口的状态&#xff0c;基本信息&#xff0c;温度&am…

Kafka【十一】数据一致性与高水位(HW :High Watermark)机制

【1】数据一致性 Kafka的设计目标是&#xff1a;高吞吐、高并发、高性能。为了做到以上三点&#xff0c;它必须设计成分布式的&#xff0c;多台机器可以同时提供读写&#xff0c;并且需要为数据的存储做冗余备份。 图中的主题有3个分区&#xff0c;每个分区有3个副本&#xf…

解决商店汽水兑换问题——利用贪心算法与循环结构

解决商店汽水兑换问题——利用贪心算法与循环结构 在某商店中,有一种特别的促销活动:三个空汽水瓶可以换一瓶汽水。而且,如果空瓶数量不足,还可以向老板借空瓶(但必须要归还)。给定初始的空瓶数量,如何计算最多可以喝到多少瓶汽水?这个问题可以通过贪心算法来高效解决…

windows手工杀毒-寻找可疑进程之线程

上篇回顾&#xff1a;windows手工杀毒-寻找可疑进程之进程模块-CSDN博客 上篇我们介绍了如何通过进程模块寻找可疑进程&#xff0c;进程模块文件按照PE格式存储&#xff0c;我们可以使用IDA等静态分析&#xff08;不需要运行文件&#xff0c;只看文件内容&#xff09;工…

仕考网:军队文职人员公开招考笔试考试大纲

考试方式和时限 考试方式为闭卷笔试&#xff0c;考试时限为120分钟。 试卷分值和试题类型 试卷满分为100分&#xff0c;试题类型为客观性试题。 测查内容 测查内容主要包括基本知识和岗位能力&#xff0c;具体内容如下。 1.基本知识 2.岗位能力 ①言语理解与表达 ②数…

redis主从+高可用切换+负载均衡

1. redis主从配置 # 在master中 cp sentinel.conf /etc/redis/ vim /etc/redis/sentinel.conf scp /etc/redis/sentinel.conf server2:/etc/redis/ scp /etc/redis/sentinel.conf server3:/etc/redis/ redis-sentinel /etc/redis/sentinel.conf # 启动监控# 在slave中 redis-s…

Java SpringBoot集成Vue.js,构建茶园茶农文化交流平台,四步实现高效互动,MySQL存储数据更稳定

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

LevelDB RockesDB LSM

LevelDB levelDB是同样也是一个Key-value数据库&#xff0c;但是相对于Redis、memcache来说&#xff0c;levelDB是基于内存-磁盘来实现的&#xff0c;但在大部分场景下也表现出了不逊色于Redis、Memcache的性能。levelDB由google实现并开源&#xff0c;轻松支持billion量级的数…

解读:以RTC为基,AI为脑的“超拟人”AI实时互动解决方案

我们打造了一款满足想象与应用的智能体——AI实时互动。 谈谈AI智能体 当AI变得足够聪明时&#xff0c;用户与AI的交互将变得真实自然。于是&#xff0c;构建高拟真AI与用户的实时交互&#xff0c;已经成为企业提升数智化生产力的新思路。 在这个交互过程中&#xff0c;存在一…