SpringBoot后端接口请求参数映射方式详解

简介: SpringBoot后端接口请求参数映射方式详解

在SpringBoot项目中,前端HTTP请求中的参数如何映射到Controller层的接口方法中的参数?这里针对各种方式做一个测试与总结。

1:QueryString方式

  • QueryString参数传递的方式为,在请求URL中直接拼接请求参数如:URL?param1=value1&param2=value2,

映射基本类型参数

  • 可以在Controller的接口中声明基本类型的参数,然后用@RequestParam注解修饰,指定前端传递的参数名称
@RestController
@RequestMapping("param")
@Slf4j
public class RequestParamTestController {
    @GetMapping("queryString1")
    public void testQueryString1(@RequestParam("name") String name, 
                                 @RequestParam("age") Integer age) {
        log.info("name:{}   age:{}", name, age);
    }
}

测试结果如下:

4cdec32351dc46f2bddde2e2adc7c509.png

  • 如果请求参数名称和Controller中接口方法的参数名称一致,那么可以省略@RequestParam注解。不过一般还是建议加上
  • 当请求参数名称和Controller中接口方法的参数名称一致时,加与不加@RequestParam的区别是:
  • 加上@RequestParam,其属性required默认为true,那么当前端不传递对应的参数时将会抛出异常

963890dcf090442d89769ae84013ca1a.png

  • 不加@RequestParam,前端可以不传递对应参数,此时Controller接口方法中的参数接收到的值为null

78811c233bb34ead9d9f716dbc6d1a19.png

2:映射对象类型参数

  • 定义一个对象,属性名称和前端传递的参数名称一致即可
@Data
public class User {
    private String name;
    private Integer age;
}
  • 然后将Controller接口方法中的参数声明为自定义对象:
@GetMapping("queryString2")
public void testQueryString2(@RequestBody User user) {
    log.info("name:{}   age:{}", user.getName(), user.getAge());
}

测试结果如下:

18ec09ed236f4b19a71549b404d8d601.png

3.映射数组、集合类型参数

前端有2种方式针对同一个参数传递多个值:

  在请求的QueryString中,拼接多个参数名称一样的参数即可,如URL?param=value1&param=value2&param=value3

   在请求的QueryString中,对同一个参数赋多个值,多个值之间用,隔开,如URL?param=value1,value2,value3

3.1 映射数组

在Controller接口方法中声明数组类型参数,用@RequestParam指明前端传递的参数名称即可

@GetMapping("queryString3")
public void testQueryString3(@RequestParam("name") String[] nameArray) {
    if (nameArray != null) {
        for (String name : nameArray) {
            log.info(name);
        }
    }
}

测试结果如下:

e0a56e7c2c3f46508a359d4dbe1e6953.png

804e9a52d39642e8a7f0ecdf7c7eb45c.png

如果请求参数名称和Controller中接口方法的参数名称一致,那么可以省略@RequestParam注解。不过一般还是建议加上

4:映射List

在Controller接口方法中声明List类型参数,用@RequestParam指明前端传递的参数名称即可

@RequestMapping("queryString5")

public void testQueryString5(@RequestParam("name") List<String> nameList) {
    if (nameList != null) {
        log.info("类型:{}", nameList.getClass());
        for (String name : nameList) {
            log.info(name);
        }
    }
}

测试结果如下:

795d7540c8224ad8b94f962540e60fd9.png

@RequestMapping("path1/{name}/{age}")
public void testPath1(@PathVariable("name") String name, @PathVariable("age") Integer age) {
    log.info("name:{}   age:{}", name, age);
}

5:路径参数方式 restful 风格

  • 路径传参方式是将参数直接包含在URL路径中,比如URL/paramValue1/paramValue2

路径参数方式对于请求方法GET、POST、PUT、PATCH、DELETE都适用

  • 1.映射基本类型参数

在Controller中用如下步骤接收参数:

   在接口对应的请求路径中用{参数名}形式标出路径参数

   在接口方法的参数上标注@PathVariable指名对应路径参数的参数名

@RequestMapping("path1/{name}/{age}")
public void testPath1(@PathVariable("name") String name, 
                      @PathVariable("age") Integer age) {
    log.info("name:{}   age:{}", name, age);
}

测试结果:

cbcb11b93d1d4b49a70b3c45ebe8c40e.png

5.1 映射数组、集合类型参数

直接给路径参数多个值,用,隔开即可

2.1 映射数组

在Controller接口方法中声明数组类型参数,用@PathVariable指明路径参数的名称即可

@RequestMapping("path2/{name}/{age}")
public void testPath2(@PathVariable("name") String[] nameArray, 
                      @PathVariable("age") Integer[] ageArray) {
    for (String name : nameArray) {
        log.info(name);
    }
    for (Integer age : ageArray) {
        log.info(age.toString());
    }
}

测试结果如下:

6872a4ec6f954c8bb6242a96e4c0e41f.png

2.2 映射List

@RequestMapping("path4/{name}/{age}")
public void testPath4(@PathVariable("name") List<String> nameList, 
                      @PathVariable("age") List<Integer> ageList) {
    log.info("类型:{}", nameList.getClass());
    for (String name : nameList) {
        log.info(name);
    }
    for (Integer age : ageList) {
        log.info(age.toString());
    }
}

测试结果如下:

bf3a3646ad7741fe9af1334415e74ec2.png

6:请求体json方式

参数传递方式对于请求方法POST、PUT、PATCH、DELETE都适用 但是不适合Get 请求

@RestController
@RequestMapping("param")
@Slf4j
public class RequestParamTestController {
    @PostMapping("queryString1")
    public void testQueryString1(@RequestBody("name") String name,
                                 @RequestBody("age") Integer age) {
        log.info("name:{}   age:{}", name, age);
    }
}

测试结果如下:

99dd7da3735345c897a4112ddacbd579.png

持续更新中..........

详细请看:

Required request parameter ‘name‘ for method parameter type String is not present 报错解决方法_x@lijun的博客-CSDN博客



目录
相关文章
|
2月前
|
安全 NoSQL Java
SpringBoot接口安全:限流、重放攻击、签名机制分析
本文介绍如何在Spring Boot中实现API安全机制,涵盖签名验证、防重放攻击和限流三大核心。通过自定义注解与拦截器,结合Redis,构建轻量级、可扩展的安全防护方案,适用于B2B接口与系统集成。
515 3
|
2月前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
258 2
|
6月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
640 1
|
5月前
|
算法 网络协议 Java
Spring Boot 的接口限流算法
本文介绍了高并发系统中流量控制的重要性及常见的限流算法。首先讲解了简单的计数器法,其通过设置时间窗口内的请求数限制来控制流量,但存在临界问题。接着介绍了滑动窗口算法,通过将时间窗口划分为多个格子,提高了统计精度并缓解了临界问题。随后详细描述了漏桶算法和令牌桶算法,前者以固定速率处理请求,后者允许一定程度的流量突发,更符合实际需求。最后对比了各算法的特点与适用场景,指出选择合适的算法需根据具体情况进行分析。
501 56
Spring Boot 的接口限流算法
|
5月前
|
Java API 网络架构
基于 Spring Boot 框架开发 REST API 接口实践指南
本文详解基于Spring Boot 3.x构建REST API的完整开发流程,涵盖环境搭建、领域建模、响应式编程、安全控制、容器化部署及性能优化等关键环节,助力开发者打造高效稳定的后端服务。
813 1
|
6月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
510 17
|
6月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
160 18
|
6月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
220 10
|
设计模式 Java 网络架构
SpringBoot请求映射源码分析(没看过源码的小白也能懂,比针尖还细)
SpringBoot请求映射源码分析(没看过源码的小白也能懂,比针尖还细)
464 0
SpringBoot请求映射源码分析(没看过源码的小白也能懂,比针尖还细)
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。

热门文章

最新文章