【Bug合集】——Java大小写引起传参失败,获取值为null的解决方案

简介: 类中成员变量命名问题引起传送json字符串,但是变量为null的情况做出解释,@Data注解(Spring自动生成的get和set方法)和@JsonProperty

  image.gif 编辑

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:本文面向的人群

二:错误场景引入

三:正确场景引入

四:问题解决

五:解决方法

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;
}

image.gif

我们在反编译文件中可以看到

image.gif 编辑

现在我们进行测试

@RequestMapping("test")
    public String test(@RequestBody Student student){
        System.out.println();
        return "返回的参数为"+student;
    }

image.gif

使用postman中json格式进行传参,帮助Student初始化,并返回student

image.gif 编辑

可以看到我们进行JSON格式的传参下,Student并没有接收到ID这个参数1,说明就是,set方法没有拿到参数ID=1

三:正确场景引入

现在我们把Student类中的成员变量ID设置为小写的id,再来进行测试

image.gif 编辑

对应的get和set方法

image.gif 编辑

postman测试,可以看见,我们的Student类顺利的拿到了JSON中传过来的参数

image.gif 编辑

四:问题解决

因为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;
}

image.gif


相关文章
|
1月前
|
Java 开发者
Java Set:当“重复”遇见它,秒变“独宠”!
在Java编程中,Set接口确保集合中的元素不重复,每个元素都是独一无二的“独宠”。本文介绍了Set的两种常见实现:HashSet和TreeSet。HashSet基于哈希表实现,提供高效的添加、删除和查找操作;TreeSet基于红黑树实现,不仅去重还能对元素进行排序。通过示例代码,展示了这两种集合的具体应用,帮助开发者更好地理解和使用Set。
27 4
|
2月前
|
安全 Java
Java“不兼容类型” 错误怎么查找解决
在 Java 中遇到“不兼容类型”错误时,首先理解错误信息,它表明试图将一种类型赋给不兼容的类型。检查代码中类型不匹配的赋值、方法调用参数类型不匹配、表达式类型不兼容及泛型类型不匹配等问题。解决方法包括进行类型转换、修改代码逻辑、检查方法参数和返回类型以及处理泛型类型不匹配。通过这些步骤,可以有效解决“不兼容类型”错误,确保代码类型兼容性良好。
489 9
|
2月前
|
IDE Java 开发工具
Java“未封闭的 String 表达式”怎么解决
要解决Java中的“未封闭的 String 表示”问题,需检查并修正字符串字面量,确保每个字符串被正确地用双引号括起来。若字符串跨越多行,可使用字符串连接操作符(+)或引入文本块(JDK 13 及以上版本)。这能帮助避免语法错误,并使代码更整洁易读。
114 7
|
2月前
|
IDE Java 测试技术
Java“非法的表达式开头"是什么原因引起的,怎么解决
“非法的表达式开头”通常是由于在Java代码中错误地放置了表达式或语法错误导致的。例如,在应该是一个语句的地方写了一个表达式,或者在表达式内部出现了不正确的结构。解决方法是检查并修正相关语法错误,确保表达式的正确性和位置适当性。检查括号是否配对完整,以及变量声明、运算符使用是否符合规范也是必要的步骤。
319 7
|
7月前
|
存储 Java
Java中带返回值方法的定义与调用技术
Java中带返回值方法的定义与调用技术
107 1
|
缓存 人工智能 Java
Java 巧用占位符
Java 巧用占位符
120 0
|
搜索推荐 Java 编译器
Java 断言 assert 你真的会用嘛?
Java assert 断言机制是 Java 5 中推出的新特性,它主要用于在程序运行时检查状态或假设的正确性,并在不正确时抛出 AssertionError 异常。使用 assert 断言可以使代码更加健壮、可靠,提高程序的可维护性和可读性。
344 0
|
Java
java学习第十一天笔记-字符串216-添加用户对象并判断是否存在
java学习第十一天笔记-字符串216-添加用户对象并判断是否存在
99 0
java学习第十一天笔记-字符串216-添加用户对象并判断是否存在
|
Java
java学习第十二天笔记-字符串230-修改逻辑
java学习第十二天笔记-字符串230-修改逻辑
79 0
java学习第十二天笔记-字符串230-修改逻辑
|
Java
java学习第九天笔记-方法171-复杂对象数组练习-删除
java学习第九天笔记-方法171-复杂对象数组练习-删除
93 0
java学习第九天笔记-方法171-复杂对象数组练习-删除

热门文章

最新文章