news 2026/7/14 23:51:15

三大传参注解完整详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三大传参注解完整详解

一、@RequestParam(你项目绝大多数接口在用,form 表单 / URL 查询参数)

1. 接收数据来源

两种数据载体:

  1. GET 请求:URL?后面拼接的键值对 例:/actionmall/product/findproducts.do?pageNum=1&pageSize=10
  2. POST 表单提交:Content-Type: application/x-www-form-urlencoded(你 JMeter 所有接口都是这个类型) 表单体:account=zhangsan&password=123456

2. 核心属性

java

// 完整写法 @RequestParam( value = "前端参数名", required = true, // 是否必传,不传直接400报错 defaultValue = "1" // 参数缺失时默认值,自动使required=false )
  • required=true(默认):压测时 JMeter 漏传该参数,直接返回 400,计入错误率(你 20%/50% 报错核心诱因)
  • defaultValue:兜底,分页、ID 类参数推荐配置,减少压测失败

3. 多值 / 数组接收(购物车批量结算场景)

前端传:cartIds=1&cartIds=2&cartIds=3

java

// 直接接收集合 public Result createOrder(@RequestParam List<Long> cartIds)

4. 适用场景

你的全量前台、后台、支付回调接口全部适配;不能接收 JSON 字符串,如果前端传 JSON,用这个注解会接收不到任何数据。

5. JMeter 匹配示例

plaintext

POST /actionmall/user/do_shturl.c Content-Type: application/x-www-form-urlencoded account=zhangsan&password=123456&captchaKey=test

后端接收:

java

@RequestMapping("/user/do_shturl.c") public Result login( @RequestParam String account, @RequestParam String password, @RequestParam String captchaKey )

二、@RequestBody(接收 JSON 请求体,表单接口完全不兼容)

1. 接收数据来源

请求请求体完整 JSON 字符串,要求请求头:Content-Type: application/json请求体示例:

json

{ "productId": 1, "quantity": 2 }

2. 核心特性

  1. 只能有一个@RequestBody注解,整个请求体只能绑定一个实体类;
  2. 自动 JSON 序列化 / 反序列化,底层依赖 Jackson;
  3. 完全不识别 form 表单、URL 问号参数,混用直接参数为空、400 报错。

3. 代码示例

java

// 实体类 public class CartDTO { private Long productId; private Integer quantity; } // Controller @RequestMapping("/cart/add") public Result addCart(@RequestBody CartDTO cartDTO) { // 自动把JSON映射到CartDTO对象 }

4. 和你现有压测冲突点

你当前 JMeter 全部是application/x-www-form-urlencoded表单,如果后端接口写了@RequestBody,所有请求参数全部接收失败,错误率 100%。

改造方式:JMeter 请求头改为application/json,请求体切换为 Raw JSON。


三、@PathVariable(提取 URL 路径中的动态变量,无请求参数)

1. 接收数据来源

URL 路径本身截取变量,不是问号、不是表单、不是 JSON。 URL 示例:/actionmall/product/detail/{productId}这里{productId}就是路径变量。

2. 代码示例

java

@RequestMapping("/product/detail/{productId}") public Result getDetail(@PathVariable Long productId) { // productId 从URL路径中提取 }

访问地址:/actionmall/product/detail/1→ productId=1

3. 多路径变量

java

@RequestMapping("/order/{orderNo}/log/{logId}") public Result log(@PathVariable String orderNo, @PathVariable Long logId)

4. 关键限制

  1. 仅解析路径占位符,拿不到表单、URL 后的?参数;
  2. 没有requireddefaultValue属性,路径缺少占位符直接 404 页面不存在;
  3. 适合 RESTful 风格接口,你当前电商项目几乎没有这类接口。

四、三者核心对比表(一目了然)

表格

注解数据源对应 Content-Type典型传参格式你的项目适配度
@RequestParamURL? 参数 /form 表单application/x-www-form-urlencodedkey=val&key2=val2极高(全部现有接口)
@RequestBody请求体 JSONapplication/json{"key":val}低(无现有接口)
@PathVariableURL 路径占位符无要求,不依赖请求体/xxx/{id}极低

五、结合你压测报错的避坑重点

  1. 不要混用 @RequestBody 和表单后端接口写了@RequestBody,但 JMeter 用表单传参 → 参数全部为空,大量 400 错误;
  2. @RequestParam 的 required=true 是报错重灾区分页、地址 ID、验证码等参数如果漏传,直接失败,建议分页加defaultValue="1"兜底;
  3. @PathVariable 不存在默认值如果路径变量缺失,不会进入接口方法,直接 404,无法通过注解兜底;
  4. 同一接口可以同时使用@RequestParam + @PathVariable例:/product/{id}?page=1

    java

    public Result test(@PathVariable Long id, @RequestParam Integer page)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 23:51:03

电商支付逻辑漏洞实战:从参数篡改到竞争条件的深度剖析与防御

1. 项目概述&#xff1a;为什么我们要深入研究电商支付逻辑漏洞&#xff1f; 如果你是一名安全研究员、渗透测试工程师&#xff0c;或者正在学习Web安全&#xff0c;那么“业务逻辑漏洞”这个词你一定不陌生。它不像SQL注入或XSS那样有明确的攻击载荷和特征&#xff0c;更像是一…

作者头像 李华
网站建设 2026/7/14 23:47:32

CNN卷积神经网络核心原理与工程实践指南

1. 先搞清楚CNN到底解决了什么问题CNN&#xff08;卷积神经网络&#xff09;最核心的价值在于它能高效处理图像这类具有空间结构的数据。如果你做过图像分类任务&#xff0c;肯定遇到过这样的问题&#xff1a;把一张图片展平成一维向量输入全连接网络&#xff0c;不仅参数爆炸&…

作者头像 李华
网站建设 2026/7/14 23:41:37

树莓派+Prometheus家庭温湿度监控系统搭建指南

1. 项目概述&#xff1a;用树莓派Prometheus搭建家庭温湿度监控系统&#xff0c;到底在解决什么问题&#xff1f;家里养了绿植、热带鱼、爬宠&#xff0c;或者单纯想搞清楚卧室夜间到底有多闷热&#xff1f;又或者刚装修完&#xff0c;担心甲醛释放高峰期伴随的高温高湿环境&am…

作者头像 李华
网站建设 2026/7/14 23:40:39

基于TPS61170与PIC32MZ的智能DC-DC升压系统设计

1. 项目背景与核心器件选型在工业控制、医疗设备和新能源领域&#xff0c;经常需要将低电压转换为高电压供电。传统方案采用分立元件搭建&#xff0c;存在效率低、体积大、稳定性差等问题。德州仪器(TI)的TPS61170作为一款集成1.2A开关的38V高压升压转换器&#xff0c;配合Micr…

作者头像 李华
网站建设 2026/7/14 23:35:38

生命先于意义的庖丁解牛

很多人的思维是&#xff1a; 找到人生意义↓人生开始有价值↓好好活着而庄子的思想&#xff0c;以及现代很多关于成长的理解&#xff0c;更接近另一种顺序&#xff1a; 生命↓活着↓行动↓现实反馈↓成长↓人生意义慢慢生长这就是&#xff1a;生命先于意义。第一层&#xff1a;…

作者头像 李华