使用Lombok @Value注解时Spring返回JSON字段变为小写的问题排查
Spring + Lombok @Value 实体类JSON序列化字段全小写问题排查与解决
这个问题我碰到过好几次,核心原因是Lombok的@Value生成的不可变类,和Jackson的序列化规则之间的小冲突,下面给你拆解原因和解决方案:
问题根源
@Value注解会生成不可变类:字段是private final,同时生成的getter方法不带get前缀(比如字段xAxis对应的getter是xAxis(),而非传统JavaBean的getXAxis())。Jackson在序列化时,如果没有明确的字段映射配置,可能会因为默认命名策略或者版本兼容问题,把驼峰格式的字段名错误转为全小写。
解决方案(按推荐优先级排序)
1. 给字段添加@JsonProperty明确指定JSON字段名
这是最直接、最稳妥的方式,强制Jackson按照你期望的名称序列化,不受任何全局配置影响:
import lombok.Value; import com.fasterxml.jackson.annotation.JsonProperty; @Value public class Movement { @JsonProperty("xAxis") int xAxis; @JsonProperty("yAxis") int yAxis; }
2. 检查并重置Jackson的命名策略
如果你的项目全局修改过Jackson的命名策略(比如不小心改成了全小写),可以在Spring Boot配置文件里重置为默认的驼峰策略:
application.properties:
spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE
application.yml:
spring: jackson: property-naming-strategy: LOWER_CAMEL_CASE
LOWER_CAMEL_CASE是Jackson默认的命名策略,会严格保留字段的驼峰格式。
3. 升级Lombok和Jackson版本
如果是老版本的Lombok(比如1.18.20之前)或者Jackson(2.12之前),可能存在序列化规则的兼容问题,升级到最新稳定版就能解决。比如Lombok用1.18.30+,Jackson用2.15+。
内容的提问来源于stack exchange,提问作者Nespony
相关产品推荐
相关产品推荐

