当前位置: 首页 > news >正文

Jackson和Lombok踩坑

问题描述

由于要返回给前端坐标轴参数,使用字段 xList、yList 表示。经调用发现返回给前端的 Json 中同时包含了 xList、xlist 和 yList、ylist。

解决方案

设置可见性:

new ObjectMapper().setVisibility();

使用 @JsonProperty 注解覆盖掉可见性的设置。

问题原因

实体类使用了 Lombok 的 @Data 注解,它会自动生成 Getter、Setter 方法。但是有一个很坑的点是 Lombok 生成的方法名和 Java Bean 规范方法名不一致。命名规范中要求,如果字段第一个字母为小写,第二个字母为大写,则 Getter、Setter 方法直接拼接字段名称。即:

Java Bean: xList -> getxList;

而 Lombok 则是对于所有字段都使用首字母大写。即:

Lombok: xList -> getXList;

这是第一个坑。第二个坑是序列化使用的 Spring 默认的 Jackson,它在进行序列化时直接把 Getter、Setter 后面的字段截取做的处理:

protected static String legacyManglePropertyName(final String basename, final int offset)
{final int end = basename.length();if (end == offset) { // empty name, nopereturn null;}// next check: is the first character upper case? If not, return as ischar c = basename.charAt(offset);char d = Character.toLowerCase(c);if (c == d) {return basename.substring(offset);}// otherwise, lower case initial chars. Common case first, just one charStringBuilder sb = new StringBuilder(end - offset);sb.append(d);int i = offset+1;for (; i < end; ++i) {c = basename.charAt(i);d = Character.toLowerCase(c);if (c == d) {sb.append(basename, i, end);break;}sb.append(d);}return sb.toString();
}

代码中注释写的很清楚了,大概意思就是如果第一个字母是小写则直接返回。否则从第一个字母开始转小写,直到遇见第一个小写字符。也就是说,由于 Lombok 生成了不规范的 Getter、Setter,导致 Jackson 序列化出来一个和实际字段名称大小写不同的字段名。

这就是产生小写 xlist、ylist 的原因。还有一个问题是同时返回了正常的字段名,这个是 Jackson 可见性的问题。共有七种,可以通过下面的代码设置:

new ObjectMapper().setVisibility(PropertyAccessor.ALL);/* 共有下面几种 */GETTER,
SETTER,
CREATOR,
FIELD,
IS_GETTER,
NONE,
ALL;

在设置为 ALL 的情况下,会从上面所有的地方获取字段名,也就是说,从 FIELD 中获取了 xList,从 Getter、Setter 中获取了 xlist。然后将两个值一起返回了。

http://www.jsqmd.com/news/194219/

相关文章:

  • 航空调度模拟:练习空中交通管制员的听觉反应能力
  • CH592 CH582 CH573从机例子添加RSSI信息获取
  • TileRT超低延迟的大语言模型推理系统
  • 公共交通安全提示:地铁、公交到站语音自动播报
  • 用户权限管理系统:多租户环境下隔离GLM-TTS资源
  • windows 10系统,文件夹左侧列表丢失,列表出来和文件夹内容重叠
  • 2025年工业包装纸箱实力厂家权威推荐榜:打包/搬家/牛皮/快递/瓦楞纸箱源头厂家精选 - 品牌推荐官
  • C++学习记录-旧题新做-分割链表
  • 2025 AI数据准备:EasyLink让多模态非结构化数据处理变简单
  • CH579 CH573 CH582 开关蓝牙/BLE/RF
  • 商场导购机器人:用亲切声音引导顾客购物
  • Dify是什么:AI应用开发平台的核心功能与应用场景全解析
  • 模糊逻辑算法动态避障:Matlab模糊控制工具箱处理随机圆形与线形障碍
  • 漏洞挖掘:从小白到实战的「数字侦探」指南,月入 3 万的核心技能拆解
  • JavaScript前端交互优化:增强GLM-TTS WebUI用户体验
  • Dify怎么安装:从环境准备到配置完成的完整安装指南
  • 单元测试覆盖率提升:确保GLM-TTS核心功能稳定可靠
  • 许可证兼容性审查:确保第三方依赖符合开源协议要求
  • SDK开发计划:提供多语言客户端简化集成流程
  • 邮件营销素材准备:向潜在客户发送GLM-TTS成功案例
  • RPA流程嵌入:在UiPath中调用GLM-TTS完成语音播报任务
  • GDPR合规性检查:在欧洲市场推广GLM-TTS需注意的问题
  • 苏州数码行业等离子清洗机供应商有哪些
  • 权限校验点清单:页面/按钮/接口/字段/导出(附检查表)
  • 在Linux上挂载磁盘
  • 深夜赶项目的程序员小张盯着屏幕打了个哈欠,突然想起上周写的疲劳检测工具还没调通。今天咱们就聊聊怎么用68个人脸特征点捕捉这种“灵魂出窍“的瞬间,关键时刻能救命
  • 融资BP材料准备:用GLM-TTS作为核心技术亮点展示
  • 完整教程:Java循环遍历:For与ForEach终极指南
  • 跨组织/跨租户权限怎么设计:隔离/共享/委托(附SaaS权限模板)
  • 2025双盘抹光机厂家权威推荐榜单:双盘磨光机/⼿扶抹光机/单盘磨光机/单盘抹光机/⼿扶磨光机源头厂家精选。 - 品牌推荐官