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

RestTemplate 发送的字段第二个大写字母变成小写的问题探究

在使用RestTemplate 发送http 请求的时候,发现nDecisonVar 转换成了ndecisonVar ,但是打印日志用fastjson 打印的没有问题,换成jackson 打印就有问题。因为RestTemplate 默认使用的jackson 作为json 序列化方式,导致的问题,但是为什么出现这个问题呢?
一直搜网上,其实也没有个准确的答案而且很多都是错的,所以我就根据我的理解解读一下。

实体类使用的Lombok @data 进行的getter setter方法生成,发现lombok 和java bean 的规范有差异
在这里插入图片描述
JavaBean 的命名规范允许一些特例(如属性名第二个字母大写、前两个字母大写等),但 Lombok 的设计目标是简化代码生成,而非严格遵循所有 JavaBean 特例。其核心逻辑如下:

标准化处理:Lombok 默认将属性名的首字母强制大写,避免因属性名格式不规范导致的歧义。
兼容性优先:许多框架(如 Jackson、Gson)在解析 JSON 时依赖 JavaBean 的命名规范,但 Lombok 的默认行为可能与这些框架的预期不一致,导致字段映射错误。

那大家有没有疑惑

为什么呢?

场景 Jackson 的处理策略有两个
默认 LOWER_CAMEL_CASE 策略 getQWer() → QWer → qWer(首字母小写)。
LOWER_CASE 策略 getQWer() → QWer → qwer(全小写)。
显式使用 @JsonProperty(“qWer”) 无论策略如何,JSON 键名始终为 qWer。

网上都是说 当jackson 遇到getQWer的时候会触发LOWER_CASE一样的策略,但是实际上不是的,而是jackson 在处理拆分get set 的逻辑区别
在这里插入图片描述Jackson的处理过程字段 value:方法名 getValue 推断出属性名 value,与字段名一致,成功映射。字段 sName:方法名 setSName 推断出属性名 sname,而 JSON 中的字段是 sName。由于 sname ≠ sName,Jackson无法找到对应的字段或 setter 方法,导致 sName 未被赋值。如果 JSON 请求体中包含 “sName”: “John”,Jackson会尝试将值映射到 sname 属性。 这个操作就很骚

这个博客说getter的非常详细,大神讲解
https://www.cnblogs.com/xuanyumuxiu/p/17272890.html
解决方案

@JsonProperty("nDecisonVar")
Integer nDecisonVar;

不行
在这里插入图片描述
不对
在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/203840.html

相关文章:

  • 数据被泄露了怎么办?
  • 机器学习中的泛化能力
  • PostgreSQL中通过查询数据插入到表的几种方法( SELECT INTO和INSERT INTO ... SELECT)
  • 离线服务器Python环境配置指南
  • 微信小程序中,解决lottie动画在真机不显示的问题
  • 年会招标抽奖活动软件———仙盟创梦IDE
  • 【项目记录】准备工作及查询部门
  • PCB智能报价系统——————仙盟创梦IDE
  • 大数据量查询优化:解锁SQL性能提升的关键
  • 一、苍穹外卖
  • React-改变当前页class默认的样式
  • 集成 OpenTelemetry + Grafana:实现 ABP VNext 的全链路可观测性
  • 【疑难杂症】Mysql 无报错 修改配置文件后服务启动不起来 已解决|设置远程连接
  • C语言---结构体 、联合体、枚举
  • 【Linux安装与维护】
  • React---day1
  • 飞牛fnNAS虚拟机标准安装
  • 反弹shell
  • TASK04【Datawhale 组队学习】构建RAG应用
  • 【Netty】- 入门2
  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解
  • 助力 FPGA 国产化,ALINX 携多款方案亮相深圳、广州“紫光同创 FPGA 技术研讨会”
  • 全平台开源电子书阅读器推荐,支持多端同步+AI朗读!支持epub/mobi/azw3/pdf常见电子书格式!
  • 亚马逊AWS跑不动了?
  • Linux云计算训练营笔记day13[CentOS 7 find、vim、vimdiff、ping、wget、curl、RPM、YUM]]
  • Flannel后端为UDP模式下,分析数据包的发送方式(二)
  • 亚马逊第四个机器人中心将如何降低30%配送成本?
  • 从芯片互连到机器人革命:英伟达双线出击,NVLink开放生态+GR00T模型定义AI计算新时代
  • 网络安全-等级保护(等保) 2-0 等级保护制度现行技术标准
  • Git Clone 原理详解:为什么它比本地文件复制更快? -优雅草卓伊凡