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 ,就酱,拜了个拜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值