在前后端传值中JSON转化的坑

本文最后更新于:2024年8月27日 上午

记录

本人真的是一个大冤种,这么多年了,各种各样的踩坑,这不今天又让我碰上了。客官不要着急,请听我细细分说。

前因

在做Spring Boot整合Mybatis的一个小DEMO的时候,所有的分层,数据库配置都做好了,结果用Postman测试的新增的时候,传给后端一个JSON对象,后端拿不到值,离谱的是只能拿的到guid的值,其他两个却为null。请求体是这样写的:

1
2
3
4
5
{
"guid": "13",
"dName": "小明",
"dAge": 17
}

接受的对象是这样定义的:

1
2
3
4
5
6
7
8
9
10
@Data
public class Dog {

private String guid;

private String dName;

private Integer dAge;

}

在控制层我特意打印出接受的对象供Debug用,结果是这样的:

1
Dog(guid=13, dName=null, dAge=null)

我就在那里试了好久,一直到要吃饭了,我才恋恋不舍的离开,路上也百思不得其解。最后我看到一篇Blog后恍然大悟🤪,这才是根本原因,全世界的码农们一定要联合起来!多交流!

后果

在传输过程中dName的N,也从大写变为了小写,在进行测试时,发现所有格式为aBc的,经过JSON传值,都变为了abc,但是aaBc,经过传值后,依然是aaBc,可见,只有形如aBc这样,大写字母前只有一个小写字母的,才会出现JSON强行将大写转为小写的情况。

这是前人总结的经验教训啊!若后人哀之而不鉴之,亦使后人而复哀后人也。所以:

不要这样定义类的属性尽量使用驼峰时前面至少有2个小写字母,比如:dogName,dogAge,或者在实体类的getter方法中,加上@JsonProperty(“dName”),就可以了!

谨以此篇,敬伟大的前辈们!


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!