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,参考:
无论是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
Json序列化对象后,使用Lombok后属性xAxis大写变成小写xaxis解决方法的更多相关文章
- 更新xcode后插件失效问题——不针对特定版本的通用解决方法
一.Xcode更新后插件失效的原理 1.每次更新Xcode后插件都会失效,其实插件都还在这个目录好好的躺着呢: ~/Library/Application Support/Developer/Shar ...
- Pycharm 在Windows下出现闪退问题(即是在运行一段时间后,自己就退出崩掉了)的解决方法
Pycharm 在Windows下出现闪退问题(即是在运行一段时间后,自己就退出崩掉了)的解决方法 最近自己下载了最新版本的Pycharm,运行程序过程中发现,在运行一段时间后(比如10几分钟),Py ...
- 【转】chrome 67版本后无法拖拽离线安装CRX格式插件的解决方法
第一种:开启开发者模式即可 (推荐) chrome 的设置 -> 更多工具 -> 扩展程序,开启开发者模式即可! 第二种方法:修改参数 首先打开下面地址:chrome://flags/# ...
- Json序列化对象
之前都是用的二进制的序列化方法,是.net自带的,但是最常用到的还是Json序列化 (1)只需要调用 Newtonsoft.Json.dll 即可 public class JsonTools { / ...
- Ubuntu每次开机后提示:检测到系统程序出现问题的解决方法
首先,错误报告存放位置: cd /var/crash/ ls //可以查看错误报告 1 2 sudo rm /var/crash/* //删除该目录下的所有文件 1 但是,这只是删除掉的是错误报告,如 ...
- AJAX 请求后使用 JS 打开新标签页被阻止的解决方法
需求:发起一个 AJAX 请求,根据请求结果来打开一个新页面. 问题:AJAX 请求后,使用 window.open() 方法来打开新页面会被浏览器阻止. 解决方法:在 AJAX 请求之前,就使用 c ...
- 解决安装VC6.0后出现MSDEV.EXE错误,无法用打开工程解决方法
问题:安装VC6.0后,在打开项目或添加文件时,出现如下错误: 可能导致原因:由于Ms安装软件的兼容性问题,导致VC6.0安装不完全, 解决方法:--网上打sp6补丁的方法貌似不可用,所以可以采用另一 ...
- EF中Json序列化对象时检测到循环引用的解决办法
MVC4 EF中将数据表外键引用的是自身,转换成Json时,总是提示错误:“序列化类型为....的对象时检测到循环引用.”: 解决办法: 把要序列化的对象转为匿名对象去掉导航属性,如下 :本来是var ...
- JSON 序列化的时候忽略无效的属性值
例如我拥有以下代码. public class NewObject { public int? TestValue { get; set; } public int? Age { get; set; ...
- 【玩转Golang】 自定义json序列化对象时,非法字符错误原因
由于前台web页面传来的日期对象是这样的格式“2010-11-03 15:23:22”,所以我安装网上查来的办法,自定义包装了time.Time对象,实现自己的Marshal和UnMarshal方法 ...
随机推荐
- Python之时间日期操作
常用时间操作的函数汇总, 涵盖 常用的time datetime 1.计算两个日期相差天数 import datetime str1 = '2021-10-20' str2 = '2021-10- ...
- Blazor 组件库 BootstrapBlazor 中EditorForm组件介绍
组件介绍 EditorForm 组件是一个非常实用的组件,当进行数据编辑时,仅需要将 Model 属性赋值即可. 绑定模型默认自动生成全部属性,可以通过设置 AutoGenerateAllItem 更 ...
- Postgresql——postgis安装
PostGIS安装 PostGIS 是一个开源数据库拓展,它为 PostgreSQL 数据库增加了对地理空间数据的支持.PostGIS 使得空间数据的存储.查询和分析变得简单高效. PostGIS 是 ...
- 生成条形码二维码DataMatrix条码.EAN码.39码.交叉25码.UPC码.128码.93码.ISBN码.Codabar等
1.引用Spire.Barcode 在Nuget包中安装Spire.Barcode 2.生成条形码 //创建 BarcodeSettings对象 BarcodeSettings settings = ...
- 【Amadeus原创】Docker安装wikijs wiki系统
拉取mysql8的镜像并运行 docker pull mysql docker run -d -v /data/mysql/data:/var/lib/mysql -v /data/mysql/con ...
- 关于 Span 的一切:探索新的 .NET 明星: 4. Span<T> 和 Memory<T> 是如何与 .NET 库集成的?
4. Span<T> 和 Memory<T> 是如何与 .NET 库集成的? 1. Span<T> 是什么? 2. Span<T> 是如何实现的? 3. ...
- 渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)
本文是高级前端加解密与验签实战的第6篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA加密来爆破登录. 分析 这里的代码跟上文的类似,但是加密的公钥是通过请求服 ...
- shell内置字符串替换
shell变量赋值语法: 使用规则 解释单引号 所见即所得,即输出时会将单引号内的所有內容都原样输出,或者描述为单引号里面看到的是什么就会输出什么,这称为强引用双引号 (默认) 输出双引号内的所有内容 ...
- 开源架构Fabric、FISCO BCOS(以下简称“BCOS”)、CITA 技术对比
转自 https://www.coingogo.com/news/41300 联盟链技术哪家强?开源架构Fabric.FISCO BCOS(以下简称"BCOS").CITA 技术对 ...
- Qt通用方法及类库10
函数名 //获取保存的文件 static QString getSaveName(const QString &filter, QString defaultDir = QCoreApplic ...