欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 【注解】反序列化时匹配多个 JSON 属性名 @JsonAlias 详解

【注解】反序列化时匹配多个 JSON 属性名 @JsonAlias 详解

2025/4/19 19:55:58 来源:https://blog.csdn.net/weixin_45188218/article/details/141470214  浏览:    关键词:【注解】反序列化时匹配多个 JSON 属性名 @JsonAlias 详解

@JsonAlias 注解是 Jackson 提供的一个功能强大的注解,允许一个字段在反序列化时匹配多个 JSON 属性名。它适用于在处理多种输入数据格式时,或当 JSON 数据的键名可能变化时。

一、@JsonAlias 的作用

  • 多种别名:@JsonAlias 允许你为一个字段定义多个可能的 JSON 键名,这在 JSON 数据的键名有多种可能时非常有用。
  • 反序列化:在反序列化时,如果 JSON 中的键名与 @JsonAlias 中定义的别名之一匹配,Jackson
    就会把这个键的值赋给对应的字段。
  • @JsonAlias 的作用除了上述两个之外,也同 @JsonProperty ,详情参考—> 【注解】@JsonProperty 详解

二、示例:使用 @JsonAlias 来处理多个键名

真实使用场景—> 数据库存的JSON数据转为Map,key值是中文,转成英文,转为json数据传给前端

假设你有一个 User 类,它的字段可以接收多个不同的 JSON 键名。例如,可能存在 “名称” “名字”,它们都应该映射到 name 字段。
在这里插入图片描述

import com.fasterxml.jackson.annotation.JsonAlias;public class User {@JsonAlias({"名称", "名字"})private String name;@JsonAlias({"年龄", "岁数"})private int age;@JsonAlias({"性别", "性"})private String gender;// Getters and Setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}
}

使用示例
假设你接收到的 JSON 数据可能是以下两种形式之一:

{"名字": "张三","岁数": 30,"性": "男"
}

或者:

{"名称": "李四","年龄": 25,"性别": "女"
}

@JsonAlias 会处理这两种情况,并将它们都映射到 User 对象中相应的字段上。

控制器中的使用
在这里插入图片描述

@RestController
@RequestMapping("/api")
public class UserController {@PostMapping("/user")public User createUser(@RequestBody User user) {// 此时 user 对象已经根据别名进行了正确的映射return user;  // 可以返回给前端,或者进行其他业务处理}
}

前端处理
无论前端发送的是 “名字” 还是 “名称”,后端都可以正确处理并将其映射到 name 字段上。

@JsonAlias 在反序列化中处理多个别名:适用于处理不同 JSON 格式或处理 JSON 键名变化的场景。
便捷性:通过 @JsonAlias,无需在代码中手动处理不同的键名映射,Jackson 会自动完成这项工作。
增强灵活性:可以更灵活地处理外部输入的数据格式,确保应用程序的兼容性和健壮性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词