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方法 ...
随机推荐
- ArrayList removeRange方法分析
<ArrayList原码分析>一文中提到了"为什么removeRange(int fromIndex,int toIndex)是protected的?" 先给出remo ...
- DSPf28335 --工程模版相关文件
创建工程需要的两个文件 DSP2833x_common 1.cmd 下图中的两个文件(由TI公司提供的) 1.28335_RAM_lnk.cmd :程序下载到RAM中进行调试和仿真所使用的启动文件. ...
- Windows之子系统WSL
[安装] 安装参考:https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-k ...
- Element-Plus表格:Table自定义合并行数据的最佳实践
" 知行合一 " -- 王阳明 在开发项目中,我们时常会用到表格,许多需求可能会要求自定义特定的行或列. 接下来,我们将探讨在实际开发中如何应对这一挑战. 本文案例采用的技术: 名 ...
- H5C3时钟实例(rem适配)
1.原理分析和效果图 先上效果图: 屏幕适配上使用rem适配,假设用户的手机屏幕最下宽度是375px,而谷歌浏览器最小的字体大小为12px,所以我以375px为标准尺寸进行rem适配,即375px的屏 ...
- 不求甚解--详解ansible-playbook中roles的用法
前言 本文将详细介绍ansible-playbook中roles的各种用法,它允许你将相关的任务.变量.处理器.文件和模板等集合在一起,以便于在不同的项目中复用 环境准备 组件 版本 操作系统 Ubu ...
- python雪花算法
雪花算法(Snowflake Algorithm)是一种用于生成唯一的ID的算法,它由Twitter开发.其生成的ID在全局范围内是唯一的,适合高并发场景.雪花算法生成的ID通常是一个64位的整数,包 ...
- opencv+Linux源码编译安装及引用
(一)下载 opencv下载地址:https://opencv.org/releases/ opencv_contrib下载地址:https://github.com/opencv/opencv_co ...
- containerd 导入镜像
containerd 导入镜像 containerd而非docker,需要离线导入镜像 解决原理https://segmentfault.com/a/1190000019534913ctr --nam ...
- (default-compile) on project app: Fatal error compiling: 无效的标记: --release -> [Help 1]
<plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <versio ...