三大传参注解完整详解

发布时间:2026/7/14 23:51:20
三大传参注解完整详解 一、RequestParam你项目绝大多数接口在用form 表单 / URL 查询参数1. 接收数据来源两种数据载体GET 请求URL?后面拼接的键值对 例/actionmall/product/findproducts.do?pageNum1pageSize10POST 表单提交Content-Type: application/x-www-form-urlencoded你 JMeter 所有接口都是这个类型 表单体accountzhangsanpassword1234562. 核心属性java// 完整写法 RequestParam( value 前端参数名, required true, // 是否必传不传直接400报错 defaultValue 1 // 参数缺失时默认值自动使requiredfalse )requiredtrue默认压测时 JMeter 漏传该参数直接返回 400计入错误率你 20%/50% 报错核心诱因defaultValue兜底分页、ID 类参数推荐配置减少压测失败3. 多值 / 数组接收购物车批量结算场景前端传cartIds1cartIds2cartIds3java// 直接接收集合 public Result createOrder(RequestParam ListLong cartIds)4. 适用场景你的全量前台、后台、支付回调接口全部适配不能接收 JSON 字符串如果前端传 JSON用这个注解会接收不到任何数据。5. JMeter 匹配示例plaintextPOST /actionmall/user/do_shturl.c Content-Type: application/x-www-form-urlencoded accountzhangsanpassword123456captchaKeytest后端接收javaRequestMapping(/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. 核心特性只能有一个RequestBody注解整个请求体只能绑定一个实体类自动 JSON 序列化 / 反序列化底层依赖 Jackson完全不识别 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. 代码示例javaRequestMapping(/product/detail/{productId}) public Result getDetail(PathVariable Long productId) { // productId 从URL路径中提取 }访问地址/actionmall/product/detail/1→ productId13. 多路径变量javaRequestMapping(/order/{orderNo}/log/{logId}) public Result log(PathVariable String orderNo, PathVariable Long logId)4. 关键限制仅解析路径占位符拿不到表单、URL 后的?参数没有required、defaultValue属性路径缺少占位符直接 404 页面不存在适合 RESTful 风格接口你当前电商项目几乎没有这类接口。四、三者核心对比表一目了然表格注解数据源对应 Content-Type典型传参格式你的项目适配度RequestParamURL? 参数 /form 表单application/x-www-form-urlencodedkeyvalkey2val2极高全部现有接口RequestBody请求体 JSONapplication/json{key:val}低无现有接口PathVariableURL 路径占位符无要求不依赖请求体/xxx/{id}极低五、结合你压测报错的避坑重点不要混用 RequestBody 和表单后端接口写了RequestBody但 JMeter 用表单传参 → 参数全部为空大量 400 错误RequestParam 的 requiredtrue 是报错重灾区分页、地址 ID、验证码等参数如果漏传直接失败建议分页加defaultValue1兜底PathVariable 不存在默认值如果路径变量缺失不会进入接口方法直接 404无法通过注解兜底同一接口可以同时使用RequestParam PathVariable例/product/{id}?page1javapublic Result test(PathVariable Long id, RequestParam Integer page)