Jackson中可通过@JsonProperty指定字段别名实现序列化与反序列化映射,@JsonAlias支持多输入别名仅用于反序列化,全局PropertyNamingStrategies可统一配置命名策略,优先级为@JsonProperty > 全局策略。

在Java中使用Jackson处理JSON时,可以通过注解为字段指定别名,让JSON字段名与Java属性名不一致也能正确序列化和反序列化。
使用 @JsonProperty 指定单个字段别名
这是最常用的方式,适用于对某个具体字段设置JSON键名。标注在字段或getter/setter方法上均可,效果一致。
- 若用于字段,同时影响序列化(Java → JSON)和反序列化(JSON → Java)
- 支持在 getter 上标注只影响序列化,在 setter 上标注只影响反序列化(较少用)
- 示例:@JsonProperty("user_name") private String userName;,JSON中对应
"user_name": "zhangsan"
使用 @JsonAlias 处理多个可能的输入别名
当服务接收的JSON可能有多种历史字段命名(如 userId、user_id、uid),可用 @JsonAlias 声明多个可接受的输入名,仅作用于反序列化。
- 必须配合
@JsonProperty或字段名一起使用,不能单独存在 - 示例:@JsonProperty("userId") @JsonAlias({"user_id", "uid"}) private Long id;
- 这样无论JSON传
{"userId":1}、{"user_id":1}还是{"uid":1},都能正确绑定到id字段
全局配置默认别名策略(PropertyNamingStrategies)
如果项目中多数字段都遵循统一命名规则(如驼峰转下划线),推荐使用全局策略,避免每个字段重复加注解。
- 常见策略:
PropertyNamingStrategies.SNAKE_CASE(驼峰转下划线)、UPPER_CAMEL_CASE、KEBAB_CASE - 配置方式(Spring Boot):在
application.yml中添加
spring.jackson.property-naming-strategy: SNAKE_CASE - 或代码中手动配置:
ObjectMapper mapper = new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
注意优先级与冲突处理
当多种配置共存时,Jackson按以下顺序生效(高优先级覆盖低优先级):
-
@JsonProperty注解 > 全局PropertyNamingStrategy -
@JsonAlias只参与反序列化,不影响输出JSON的键名 - 若同一字段同时有
@JsonProperty("a")和@JsonAlias({"b","c"}),则输出始终为"a",但输入接受"a"、"b"、"c"三种写法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











