新手必懂的SpringBoot接口传参全攻略:查询参数/路径参数/JSON 参数

 更新时间:2026年04月17日 09:04:07   作者:暗暗别做白日梦  
本文系统讲解SpringBoot接口传参的核心知识点,涵盖三种标准传参方式,即URL查询参数,路径参数和JSON请求体,文中的示例代码讲解详细,希望对大家有所帮助
  • 为什么有的接口直接写 DTO 就能接收参数?
  • @PathVariable@RequestParam@RequestBody 到底什么时候用?
  • GET 请求能不能传 JSON?路径参数和查询参数怎么区分?
  • 省市区联动接口该如何设计传参和返回值?

本文结合真实业务代码,用最通俗的语言,把 SpringBoot 接口传参的所有核心知识点讲透,新手看完直接上手!

一、SpringBoot 三大传参方式(核心必背)

SpringBoot 接口传参分为 3 种标准场景,对应不同的请求类型和业务需求,严格遵循 HTTP 协议规范

URL 查询参数(? 后面的参数)→ 最常用

适用场景:GET 请求、查询列表、多条件筛选、省市区联动等获取数据的场景接收写法直接写 DTO / 实体类,无需任何注解,Spring 自动封装参数前端传参/api/linkage?parentId=0&level=1

// 你的省市区联动接口(标准查询参数写法)
@GetMapping("/linkage")
public ApiResponse<List<CountryAreaOptionDTO>> linkage(
    @Valid CountryAreaLinkageQueryDTO request // 自动封装所有查询参数
) {
    return ApiResponse.success(countryAreaDOService.queryLinkage(request));
}

路径参数(/xxx/{id})→ 操作单个资源

适用场景:根据唯一 ID查询 / 删除 / 修改单个资源(RESTful 规范)接收写法:必须加 @PathVariable 注解前端传参/api/area/1001

// 查询单个地区详情(路径参数写法)
@GetMapping("/area/{areaId}")
public ApiResponse<CountryAreaDO> getAreaById(
    @PathVariable Long areaId // 接收路径中的ID
) {
    return ApiResponse.success(countryAreaDOService.getById(areaId));
}

JSON 请求体参数 → 增 / 改数据

适用场景:POST/PUT 请求、提交大量数据、复杂对象参数接收写法:必须加 @RequestBody 注解前端传参:JSON 格式放在请求体中

// 新增地区(JSON参数写法)
@PostMapping("/area/save")
public ApiResponse<Boolean> saveArea(
    @RequestBody CountryAreaDO areaDO // 接收JSON参数
) {
    return ApiResponse.success(countryAreaDOService.save(areaDO));
}

三大传参方式对比表

表格

传参方式请求类型核心注解业务场景
URL 查询参数GET无(直接写 DTO)查询列表、筛选、联动
路径参数GET/DELETE@PathVariable单资源查 / 删 / 改
JSON 请求体POST/PUT@RequestBody新增、修改、提交复杂数据

二、关键区分:DTO 自动封装 vs @RequestParam

新手最容易混淆:加不加 @RequestParam 的区别,一句话搞定:

  • 不加注解:自动把前端所有参数封装成 DTO 对象
  • @RequestParam:只提取前端的单个参数

不加注解 → 自动封装 DTO

前端传多个参数,Spring 自动匹配字段,封装成对象:

// 前端:?parentId=0&level=1 → 自动封装进DTO
@GetMapping("/linkage")
public ApiResponse linkage(CountryAreaLinkageQueryDTO request) {}

加@RequestParam→ 提取单个参数

只需要前端的某一个参数,单独接收:

// 只接收 provinceId 这一个参数
@GetMapping("/cities")
public ApiResponse cities(@RequestParam Long provinceId) {}

禁忌

千万不要给 DTO 加 @RequestParam,会直接报错!

三、核心铁律:GET 请求绝对不用 JSON

这是 HTTP 协议的固定规则,企业开发强制遵守

  1. GET 请求没有请求体,强行传 JSON 会被服务器丢弃
  2. GET 参数只能放在 URL 中,适合查询、非敏感数据
  3. 只有 POST/PUT 才用 JSON 参数

四、实战案例:省市区多级联动接口设计

结合你的业务需求,不修改数据库、不新增字段,纯后端实现省市区联动,完整方案如下:

前端传参规则

  • 查省份:/provincesparentId=0
  • 查城市:/cities?provinceId=xxx
  • 查区县:/districts?cityId=xxx
  • 通用接口:/linkage?parentId=xxx

后端核心代码(层级判断逻辑)

不靠数据库 level 字段,纯通过父 ID 判断省 / 市 / 区

// 核心联动查询方法
public List<CountryAreaOptionDTO> queryLinkage(Long parentId) {
    // 1. 查询当前层级数据
    List<CountryAreaDO> areas = parentId == null
            ? list(Wrappers.<CountryAreaDO>lambdaQuery().isNull(CountryAreaDO::getPid))
            : list(Wrappers.<CountryAreaDO>lambdaQuery().eq(CountryAreaDO::getPid, parentId));

    // 2. 获取所有父ID集合(判断是否有子节点)
    Set<Long> parentIds = list(Wrappers.<CountryAreaDO>lambdaQuery().isNotNull(CountryAreaDO::getPid))
            .stream().map(CountryAreaDO::getPid).collect(Collectors.toSet());

    // 3. 自动判断层级:省/市/区
    return areas.stream().map(area -> toOption(area, level, parentIds)).toList();
}

// 层级判断规则
parentId == null ? 省份 : parentIds.contains(area.getId()) ? 市 : 区

3. 前端接收 DTO(标准返回值)

@Data
public class CountryAreaOptionDTO {
    private Long id;        // 下一级查询的parentId
    private String name;   // 前端展示名称
    private String level;  // 层级编码
    private String levelDesc; // 省/市/区
    private boolean hasChildren; // 是否有子节点
}

五、新手常见问题:为什么项目不能本地启动?

很多新手发现:有的项目能启动,有的不能,核心原因只有一个:项目运行环境 / 配置不满足,和项目本身无关!

最常见 4 个启动失败原因

  1. 端口被占用:8080 端口被其他软件占用
  2. 数据库连接失败:MySQL 未启动、账号密码错误
  3. Maven 依赖未下载完:代码全红,编译失败
  4. 配置文件语法错误:yml 缩进错误

10 秒排查方法

看控制台第一行红字

  • port → 换端口
  • MySQL → 检查数据库
  • dependency → 重新加载 Maven

六、新手必背口诀(记住永不踩坑)

  1. 查数据用 GET,参数放?后面,直接写 DTO
  2. 单资源查改删,用路径参数,加 @PathVariable
  3. 增改数据用 POST,传 JSON,加 @RequestBody
  4. 不加注解封 DTO,加注解取单个参数
  5. GET 不用 JSON,路径参数只传 ID

总结

本文覆盖了 SpringBoot 接口传参的所有核心知识点,结合省市区联动真实业务,从基础用法到实战设计,彻底解决新手传参困惑。

SpringBoot 传参没有复杂逻辑,严格遵循规范,结合业务场景选择对应的方式,就能写出规范、可维护的接口代码!

以上就是新手必懂的SpringBoot接口传参全攻略:查询参数/路径参数/JSON 参数的详细内容,更多关于SpringBoot接口传参的资料请关注脚本之家其它相关文章!

相关文章

  • 分析Java设计模式之组合模式

    分析Java设计模式之组合模式

    组合模式是一种对象的行为模式。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。它的本质是统一叶子对象和组合对象。它的目的是让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作
    2021-06-06
  • springboot使用redis注解做缓存的基本操作方式

    springboot使用redis注解做缓存的基本操作方式

    这篇文章主要介绍了springboot使用redis注解做缓存的基本用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java设计模式编程之工厂方法模式的使用

    Java设计模式编程之工厂方法模式的使用

    这篇文章主要介绍了Java设计模式编程之工厂方法模式的使用,工厂方法模式属于设计模式中三种工厂模式中的一种,需要的朋友可以参考下
    2016-02-02
  • RabbitMQ  @RabbitListener 与 @RabbitHandler 的使用区别解析

    RabbitMQ  @RabbitListener 与 @RabbitHandl

    本文将深入探讨这两个注解的区别、使用方法、最佳实践以及常见问题,帮助开发者更好地理解和应用 RabbitMQ 在 Spring Boot 项目中的消息处理机制,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • java实现简单的扫雷小游戏

    java实现简单的扫雷小游戏

    这篇文章主要为大家详细介绍了java实现简单的扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Request与Session的存值取值操作

    Request与Session的存值取值操作

    这篇文章主要介绍了Request与Session的存值取值操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • spring*.xml配置文件明文加密的实现

    spring*.xml配置文件明文加密的实现

    这篇文章主要介绍了spring*.xml配置文件明文加密的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • SpringBoot读取配置的常用方式总结

    SpringBoot读取配置的常用方式总结

    在SpringBoot应用开发中,配置文件是不可或缺的一部分,它们帮助我们管理应用的运行时参数,使得应用的部署和维护变得更加灵活,本文将介绍六种常用的SpringBoot读取配置方式,需要的朋友跟着小编一起来看看吧
    2024-07-07
  • 解决Springboot获取不到nacos配置中心的配置问题

    解决Springboot获取不到nacos配置中心的配置问题

    由于项目使用的nacos老版本,存在风险bug, 需要将nacos升级至2.2.1及以上版本,版本升级完毕之后 启动项目发现项目开始报错,所以本文记录一下Springboot获取不到nacos配置中心的配置问题,文中有详细的解决方法,需要的朋友可以参考下
    2023-09-09
  • Java如何生成压缩文件工具类

    Java如何生成压缩文件工具类

    这篇文章主要介绍了Java如何生成压缩文件工具类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论