关于参数首字母小写而后面大写无法接收数据的问题
原创2025/1/15大约 1 分钟
关于参数首字母小写而后面大写无法接收数据的问题
1、业务背景
今日同事问我一个问题,你看看我这代码,怎么都接不到参数,参数类定义如下:
@Data
public class Demo {
private Long pId;
}Controller 层定义如下:
public ApiResponse<?> demo(@RequestBody Demo demo) {
// 打印参数,始终:demo{pId=null}
System.out.println(demo);
return ApiResponse.success();
}请求参数如下:
{
"pId": 123456789
}2、问题现象
demo 对象不为空,但字段 pId 的值始终为 null。
3、排查过程
(1)我上下打量了一番,看着确实没有问题啊。
(2)忽然,我看到了这个字段的特点:首字母小写,后面大写。
(3)我洋洋得意,我找到原因了,你把请求参数改为下面的试试:
{
"pid": 123456789
}4、定位原因
哈哈,真的可以接收到了!原因?什么原因?我也说不上来[狗头]!
问问度娘吧,找到了一个权威的说法:
https://zhuanlan.zhihu.com/p/628668559
总结起来就是一句话:Lombok 生成的 Getter 和 Setter 方法与 JSON 反序列化解析时遵循的规则不一致导致的,但没有标准,公说公有理婆说婆有理。
5、解决方案
把参数的名字重命名为规范的就行了。
6、总结经验
一定得按照规范起名字,避免起这种一个字母小写的驼峰命名的名字!

