Java Spring中DTO响应JSON字段重命名问题:@JsonProperty注解未生效排查
解决Spring项目中@JsonProperty不生效的问题
我之前也碰到过一模一样的情况——明明按文档要求加了@JsonProperty注解,返回的JSON却还是保持驼峰命名。结合你的代码和场景,给你几个排查和解决的思路:
1. 检查Jackson依赖与版本冲突
首先确认项目里的Jackson依赖是否正常,尤其是Spring Boot项目:
- 如果用的是
spring-boot-starter-web,它已经默认包含了Jackson核心依赖(jackson-databind、jackson-core等),不需要额外引入。 - 排查是否有其他JSON库(比如Fastjson、Gson)的依赖,这类库可能会替换Spring默认的Jackson消息转换器,直接导致
@JsonProperty注解失效。如果有这类依赖,要么移除,要么手动配置Spring强制使用Jackson作为默认转换器。
2. 验证Lombok与Jackson的兼容性
你用了Lombok的@Data注解自动生成getter/setter,有时候Lombok生成的方法逻辑可能和Jackson的解析规则不匹配,导致注解失效。可以试试这两个方案:
- 方案一:把@JsonProperty移到getter方法上
手动生成(或修改Lombok生成的)getter方法,将注解绑定到getter上:@JsonProperty("second_name") public String getSecondName() { return secondName; } - 方案二:配置Lombok兼容Jackson注解
在项目根目录创建lombok.config文件,添加以下配置,让Lombok生成的代码适配Jackson的注解解析:lombok.anyConstructor.addConstructorProperties=true lombok.accessors.chain=true
3. 全局配置属性命名策略(更推荐)
如果你的DTO类大多需要驼峰转下划线,没必要逐个字段加@JsonProperty,直接全局配置Jackson的命名策略更高效:
- application.yml配置方式
spring: jackson: property-naming-strategy: SNAKE_CASE - application.properties配置方式
配置后,所有驼峰命名的字段都会自动转换成下划线格式,无需再手动加注解。spring.jackson.property-naming-strategy=SNAKE_CASE
4. 检查自定义消息转换器是否覆盖默认配置
如果项目里自定义了WebMvcConfigurer并重写了configureMessageConverters方法,要确保没有替换掉默认的Jackson转换器,或者在自定义转换器里配置了正确的ObjectMapper:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); // 配置下划线命名策略 objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); converter.setObjectMapper(objectMapper); converters.add(converter); } }
最后验证
按上面的方法调整后,重启项目再测试,应该就能得到下划线命名的JSON响应了——比如你的secondName会变成second_name,dateOfBirth变成date_of_birth。
内容的提问来源于stack exchange,提问作者Simon




