【Bug合集】——Java大小写引起传参失败,获取值为null的解决方案
阿华代码,不是逆风,就是我疯
你们的点赞收藏是我前进最大的动力!!
希望本文内容能够帮助到你!!
目录
一:本文面向的人群
二:错误场景引入
三:正确场景引入
四:问题解决
五:解决方法
1:public修饰
2:使用@JsonProperty注解
一:本文面向的人群
本文主要针对类中成员变量命名问题引起传送json字符串,但是变量为null的情况做出解释。
其中涉及到@Data注解(Spring自动生成的get和set方法)和@JsonProperty
二:错误场景引入
我用postman进行json对象传输给Student类,帮助Student类进行初始的过程中,发现Student并没有拿到json中的参数,于是我展开的研究
Student类我使用了@Data注解进行Object类方法的重写(其中包含get和set方法)
@Data
public class Student {
//@JsonProperty
private Integer ID;
private String name;
private Integer age;
}
我们在反编译文件中可以看到
现在我们进行测试
@RequestMapping("test")
public String test(@RequestBody Student student){
System.out.println();
return "返回的参数为"+student;
}
使用postman中json格式进行传参,帮助Student初始化,并返回student
可以看到我们进行JSON格式的传参下,Student并没有接收到ID这个参数1,说明就是,set方法没有拿到参数ID=1
三:正确场景引入
现在我们把Student类中的成员变量ID设置为小写的id,再来进行测试
对应的get和set方法
postman测试,可以看见,我们的Student类顺利的拿到了JSON中传过来的参数
四:问题解决
因为SpringBoot中生成的方法都是小写字段,这是重点。
Student类中ID成员变量是私有的,需要通过get和set方法进行获取和设置,我们通过@Data注解(SpringBoot中内置)来写get和set方法,这两个方法默认都是小写字段,所以跟我们传过来的JSON对象中的大写字段“ID”匹配不上,进而就赋值失败,为null。
五:解决方法
1:public修饰
我们将Student中的私有成员变量设置为public
2:使用@JsonProperty注解
Springboot返回前端的JSON会有个自动大小写转换,加上这个注解就限制了,就能获取到值了
@Data
public class Student {
@JsonProperty
private Integer ID;
private String name;
private Integer age;
}