Spring中VO属性JSON序列化大小写异常及重复字段问题求助
问题描述
在Spring项目中定义了如下VO作为响应体:
@Data public class VO { private Legend legend = new Legend(); private XAxis xAxis = new XAxis(); private YAxis yAxis = new YAxis(); }
返回的JSON中属性被自动转为全小写:
{ "legend": "...", "xaxis": "...", "yaxis": "..." }
为了保留驼峰命名,给字段添加@JsonProperty注解修改VO:
@Data public class VO { private Legend legend = new Legend(); @JsonProperty("xAxis") private XAxis xAxis = new XAxis(); @JsonProperty("yAxis") private YAxis yAxis = new YAxis(); }
但修改后返回的JSON中xAxis出现两个字段,yAxis仅出现一个:
{ "legend": "...", "xaxis": "...", "xAxis": "...", "yAxis": "..." }
原因分析
- 全局命名策略与注解冲突:你的项目中大概率配置了全局JSON字段命名策略(比如强制将所有字段转为全小写),Jackson会根据Lombok生成的getter方法(如
getXAxis()),按照全局策略生成xaxis字段。 - 双重序列化触发:添加
@JsonProperty("xAxis")后,相当于强制指定了一个驼峰命名的字段,此时Jackson同时处理了两个来源的字段:一个是全局策略解析getter生成的xaxis,另一个是注解指定字段生成的xAxis,导致重复。 - yAxis无重复的临时原因:大概率是缓存或序列化上下文的临时问题(比如首次修改后未完全重启,yAxis的getter未被全局策略重新解析),本质上如果不解决根因,yAxis也可能出现同样问题。
解决方案
方案1:统一全局命名策略(推荐)
修改Spring的Jackson配置,将全局命名策略设置为驼峰命名,这样无需添加@JsonProperty即可自动生成xAxis、yAxis格式的字段:
@Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); // 设置驼峰命名策略 objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE); return objectMapper; } }
或者在application.yml中配置:
spring: jackson: property-naming-strategy: LOWER_CAMEL_CASE
方案2:用类级注解覆盖命名策略
如果不想修改全局配置,可以在VO类上添加@JsonNaming注解,指定当前类使用驼峰命名:
@Data @JsonNaming(PropertyNamingStrategy.LOWER_CAMEL_CASE.class) public class VO { private Legend legend = new Legend(); private XAxis xAxis = new XAxis(); private YAxis yAxis = new YAxis(); }
方案3:限制Jackson仅序列化字段
通过@JsonAutoDetect注解让Jackson只通过字段(而非getter方法)进行序列化,避免全局策略解析getter生成重复字段:
@Data @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE) public class VO { private Legend legend = new Legend(); @JsonProperty("xAxis") private XAxis xAxis = new XAxis(); @JsonProperty("yAxis") private YAxis yAxis = new YAxis(); }
内容的提问来源于stack exchange,提问作者SY Yu
相关产品推荐
相关产品推荐

