Json序列化对象后,使用Lombok后属性xAxis大写变成小写xaxis解决方法

Posted 黑水滴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Json序列化对象后,使用Lombok后属性xAxis大写变成小写xaxis解决方法相关的知识,希望对你有一定的参考价值。

一、问题描述

最近在开发后端接口时,发现返回结构中,一个字段大小写转化有问题。

lombok版本:1.18.14

VO对象如下,字段为echarts趋势图组件。预期返回xAxis,实际返回xaxis

@Data
public class ULineBarVO 
     /**
     * X轴信息
     */
    private ULineBarDataVO xAxis;

    /**
     * Y轴信息
     */
    private Map<String,Object> yAxis;

Spring boot项目中使用Lombok注解@Data之后,返回给前端的是xaxis,而不是我们预期中的xAxis。

 

二、问题原因

针对首字母小写,第二个字母大写的这种驼峰命名时。

使用@Data注解生成的getter和setter方法分别是:

public Map<String, Object> getYAxis() 
    return yAxis;

public void setYAxis(Map<String, Object> yAxis) 
    this.yAxis = yAxis;

 而正常场景下及Spring中对象的getter和setter方法应该是,注意方法名上getyAxis首字母是小写:

public Map<String, Object> getyAxis() 
    return yAxis;

public void setyAxis(Map<String, Object> yAxis) 
    this.yAxis = yAxis;

也就是说Lombok与Spring针对这种首字母小写,第二个字母大写的对象的解析是不同的,而这也就自然而然影响到默认的Jackson的解析,导致返回给前端的属性名称不是我们预期中的名称。 

三、Lombok问题

其实,针对这个问题,多年前就有人已经在lombok的github提出过对应的issue,参考:

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

无论是Lombok还是Spring,在处理对象的时候总会有一个API规范进行参考的,这个规范一般就是JavaBeans API的规范。而针对这个问题,Lombok的官方回复是:

JavaBeans的规范就是这样的,Lombok只是遵循这个规范而已,并且不应该使用首字母小写,第二个字母大写这样的命名规则,而Spring的处理方式才是没有遵循JavaBean的规范。除非Oracle官方推荐如此或者大家都是这样处理的化,Lombok才会进行修改。

也就是说,Lombok认为,JavaBeans的规范就是这么定义的,而针对JavaBean的规范,Spring和Lombok选择了不同的实现方式:

Spring,Jackson针对get/set的生成方式,和我们使用 IDEA 编译器自动生成get/set的方式是相同的,都是诸如getiPhone()的形式。

Lombok,针对get/set的生成方式,是getIPhone()的形式。

其实根据JavaBeans的描述,是没有具体说明针对我们文中这个问题,首字母小写,第二个字母大写这样的字段该如何get/set的

 四、解决方法,因为预期返回xAxis,而不是返回xaxis。需要手写get set方法,不使用lombok。解析正常

public Map<String, Object> getyAxis() 
    return yAxis;

public void setyAxis(Map<String, Object> yAxis) 
    this.yAxis = yAxis;

 

本人开发了一款在线的程序员工具箱,包含json、mysql格式化,ChatGPT等程序员常用的功能。欢迎您访问

地址:https://www.robots2.com/

 

 

 

 

参考文章:https://www.jianshu.com/p/bef7b73e5062 

lombok @Data注解有没有实现序列化?

lombok @Data注解有没有实现序列化?

没有序列化,如果需要在网络中传输数据,需要自己手动虚拟化接口 参考技术A

加了@Data注解的类,编译后会自动给我们加上下列方法:

    所有属性的get和set方法

    toString 方法

    hashCode方法

    equals方法

以上是关于Json序列化对象后,使用Lombok后属性xAxis大写变成小写xaxis解决方法的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 移动应用服务后端将字符串属性反序列化为 Json 对象

如何使用 Jackson 将原始 JSON 反序列化为 Java 对象

lombok @Data注解有没有实现序列化?

json序列化后的是字符串,不是二进制。是字符串!!!确定不是二进制!!!

MVC 返回json数据 怎么忽略序列化某个属性

如何忽略像“car”这样的空 json 对象:,这会在使用 jackson 反序列化后导致空 pojos