如何让Wrapper API B返回createdOn而非created_on以适配目标端C?
字段命名映射问题解决方案
核心问题分析
需要让包装器API B同时适配两个场景:接收数据源A返回的蛇形命名字段created_on,以及向目标端C输出驼峰命名的createdOn。之前@JsonProperty未生效,大概率是注解使用方式错误或配置冲突导致。
具体解决办法
1. 精准控制单字段(Jackson注解方案)
调整B类的字段注解,同时指定反序列化的别名(适配A的输入)和序列化的输出名称(适配C的需求):
import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonProperty; class B { Long id; // 反序列化时接收A的"created_on",序列化时输出为"createdOn" @JsonAlias("created_on") @JsonProperty("createdOn") String created_on; }
如果不想保留created_on字段名,也可以直接将字段改为createdOn,仅用@JsonAlias适配A的输入:
class B { Long id; @JsonAlias("created_on") String createdOn; }
注意:必须导入Jackson官方注解包
com.fasterxml.jackson.annotation,避免误导入Gson等其他框架的同名注解。
2. 全局配置批量适配(Spring Boot场景)
如果B类中有大量蛇形转驼峰的字段,可通过全局配置一次性解决,在application.properties中添加:
# 反序列化自动将蛇形命名转为驼峰(适配A的输入) spring.jackson.deserialization.property-naming-strategy=SNAKE_CASE # 序列化自动输出标准驼峰命名(适配C的需求) spring.jackson.serialization.property-naming-strategy=LOWER_CAMEL_CASE
配置后,B类无需额外加注解,即可自动完成created_on与createdOn的双向映射。
3. 排查配置冲突
若全局配置过统一命名策略(如spring.jackson.property-naming-strategy=SNAKE_CASE),会强制序列化输出蛇形字段,此时需确保字段注解优先级高于全局配置,或调整为上述分场景的序列化/反序列化策略。
验证方式
修改后测试B的输出:调用B时应返回{"id":1,"createdOn":"27July"},此时C的POJO就能正确识别createdOn字段并获取对应值。
内容的提问来源于stack exchange,提问作者ripunjoym1998
相关产品推荐
相关产品推荐

