Lombok首字母小写,第二个字母大写造成的参数无法接收问题

目录

1.问题现象

2.问题实质

3.问题原因      

4.解决方法


1.问题现象

        如果VO实体用@Data注解生成get/set,对于首字母小写,第二个字母大写的成员变量,@RequestBody无法完成自动映射,取值为null

 

2.问题实质

        Lombook的@Data注解和Spring的Jackson对于get/set的生成方式不同

3.问题原因         

private String xIndex;

        对于这种首字母小写,第二个字母大写的成员变量,Lombook生成的get/set方法如下:

        但Jackson和Idea生成的get/set方法如下:

        因为Lombook和jackson生成set方法的方式不同,造成SpringMVC在映射VO字段时无法找到setxIndex()方法(因为Lombook生成的是setXIndex),故自动映射失败

4.解决方法

        利用Idea生成符合Spring规范的get/set(略low)        

        利用@JsonProperty(value = "xIndex"),强制Jackson在反序列化时给属性重新命名

借鉴博文:Lombok首字母小写,第二个字母大写的问题 - 简书

                 Naming convention for getters/setters in Java - Stack Overflow

                 https://github.com/projectlombok/lombok/issues/757

### Lombok 首字母小写问题及解决方案 当遇到属性名首字母小写第二个字母大写的情况时,Lombok 会按照 JavaBeans 的约定自动生成 getter 和 setter 方法。然而,在某些情况下,这可能会导致参数无法正确解析的问题。 对于像 `private String xIndex` 这样的字段,Lombok 默认生成的方法名为 `getXindex()` 而不是预期中的 `getXIndex()`, 导致 Spring 或其他框架可能找不到对应的 setter/getter, 结果就是该属性未能被正确初始化或读取[^1]。 为了处理这种情况并确保代码正常工作,建议采取以下措施: #### 使用显式的 Getter 和 Setter 注解指定方法名称 通过 @Getter 和 @Setter 提供的 value 属性来手动定义 get/set 方法的名字: ```java @Getter(value = "getXIndex") @Setter(value = "setXIndex") private String xIndex; ``` 这样就可以强制 Lombok 按照期望的形式创建访问器方法了。 #### 修改变量命名遵循标准驼峰命名法 最根本的办法还是应该调整类成员变量的命名方式使之符合常见的驼峰命名习惯 (CamelCase), 即除了首个单词外其余各词首字母均应大写: ```java private String xindex; // 不推荐 // 改为 private String xIndex; // 推荐做法 ``` 这样做不仅解决了当前问题还提高了代码可读性和维护性。 #### 利用 JSON 序列化库特性绕过此限制 如果不想改变现有代码结构,则可以在序列化层面上解决问题。例如使用 Jackson 的 `@JsonProperty` 或 FastJSON 的 `@JSONField` 来映射不同的名字给同一个字段: ```java @JsonProperty("xIndex") //@JSONField(name="xIndex") 如果是FastJson则采用这个注解 private String xindex; ``` 以上三种方案都可以有效应对由于 Lombok 自动生成不当引起的 getter/setter 函数识别失败的问题。选择哪种取决于具体的应用场景和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值