当前位置: 代码网 > it编程>编程语言>Java > 新手必懂的SpringBoot接口传参全攻略:查询参数/路径参数/JSON 参数

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

2026年04月17日 Java 我要评论
为什么有的接口直接写 dto 就能接收参数?@pathvariable、@requestparam、@requestbody 到底什么时候用?get 请求能不能传 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接口传参的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com