当前位置: 首页 > news >正文

java 日常开发踩坑之LomBok @Data映射为null

java 日常开发踩坑之LomBok

踩坑日记

常用java 开发的小伙伴们对于lombok再熟悉不过了,它的存在大大减少了我们开发者们自己去编写好多东西

Lombok 的作用:

  • 通过使用 @Data 注解,Lombok 自动为类中的每个字段生成相应的 getter 和 setter 方法。
  • 同时,它还会生成 toString() 方法,以便于打印对象的详细信息。
  • 生成 equals()hashCode() 方法可以使对象能够正确地比较和用作集合中的键。

但是最近在使用的时候,出现了以下问题

问题复现

首先存在一个实体类 作为请求传入参数dto

/*** @version 1.0* @Author jerryLau* @Date 2024/10/2 10:45* @注释*/
@Data
public class UserDto {private String Name;private Integer Age;private String Address;private String Phone;
}

然后通过一个controller 进行将请求暴露出去

/*** @version 1.0* @Author jerryLau* @Date 2024/10/2 10:43* @注释*/
@RestController
@RequestMapping("/test")
public class TestController {@RequestMapping("/hello")public String hello(@RequestBody UserDto userDto) {System.out.println(userDto.toString());return "hello world";}
}

然后我们使用apipost 进行发送请求
在这里插入图片描述

那么小伙伴们猜一猜 这个控制台的实体打印是什么结果?

3、2、1我们公布答案

请添加图片描述

嘶 可能有的小伙伴们会有疑问?为什么在这个情况下 lombok 获取不到值呢?

我这个请求得到的实体类中,不可能时null啊?为什么会存在这种情况呢?

问题解析

我们再回到这个实体类上看 会发现这个实体类中好像与平常的不打一样?

可以看到各个变量中的首字母大写

经过一系列的问题排查,果然 这个最终的问题是出现在实体类的这个变量名上:

Lombok 通常与 Java 的命名约定保持一致,通常情况下,字段(变量)应该以小写字母开头,而类名应该以大写字母开头。虽然技术上可以创建以大写字母开头的字段,Lombok 仍然建议遵循 Java 的命名约定。

如果您在字段名首字母大写的情况下使用 Lombok 的注解(如 @Data),可能会导致 Lombok 生成的方法名称不符合预期,例如生成的 getter 和 setter 方法名可能会不符合 JavaBean 规范。例如,针对一个名为 Name 的字段,Lombok 将生成 getName() 方法,而不是在某些情况下可能产生混淆的 getName()

那么我们将UserDto中的私有变量名进行修改

@Data
public class UserDto {private String name;private Integer age;private String address;private String phone;
}

再试着请求一次,发现打印出来的结果是正确的

请添加图片描述

另辟蹊径

比如说,我是个犟种,我的代码我做主,我就喜欢首字母大写的变量命名规范,我不改实体类UserDto的首字母,我就要大写。那么在这个情况下,还能不能通过Lombok实现呢?

那么 犟种的方法来了

可以在变量的上方添加@JsonProperty(“xxx”) 限定请求的字段名称来解决这一问题

我们修改UserDto实体类,添加字段注释

@Data
public class UserDto {@JsonProperty("Name")private String Name;@JsonProperty("Age")private Integer Age;@JsonProperty("Address")private String Address;@JsonProperty("Phone")private String Phone;
}

尝试发送请求,发现 你获得了一个犟种🤪🤪🤪🤪🤪

请添加图片描述

总结

哈哈哈哈哈 好了 关于lombok的字段映射不到的这个问题,已经解决,希望各位小伙伴们在平时的开发中遵循代码规范,开发不规范,调试两行泪!!!

当然 如果实在不规范 ,也可以通过犟种方法🤓🤓🤓

ok 我是 国庆还在公司加班的jerry ,就酱,拜了个拜


http://www.mrgr.cn/news/41168.html

相关文章:

  • 高阶数据结构-------图
  • 二.物理层
  • 【Python】2. 变量和数据类型
  • [Linux]从零开始的网站搭建教程
  • 【PostgreSQL】提高篇——PostgreSQL 对 JSON 和数组的支持及其在数据建模中的应用
  • 【C++】单例模式
  • NP-hard问题
  • 用友U8-CRM fillbacksettingedit.php SQL注入复现
  • 第L6周:机器学习|支持向量机(SVM):2. 支持向量机实战
  • Linux的基本指令(2)
  • C++语言学习(5): cppreference 介绍和离线文档
  • 基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和
  • JavaScript(js)获取网页的图标地址
  • 【Nacos架构 原理】内核设计之Nacos寻址机制
  • 师生健康信息管理:SpringBoot技术突破
  • 滚雪球学Oracle[4.2讲]:PL/SQL基础语法
  • Matlab语言基础教程笔记
  • 两种并行控制OLED屏幕的电路方法6080和8080(SH1107)
  • 加油吧,仅有23家ICT科技类公司入围2024中国企业500强
  • 二分查找算法