【注解】@JsonProperty 详解

打印 上一主题 下一主题

主题 555|帖子 555|积分 1665

@JsonProperty

@JsonProperty 是 Jackson 库中的一个注解,用于自定义 Java 对象字段与 JSON 属性之间的映射关系。它可以用于序列化和反序列化阶段,对象字段的 JSON 键名可以通过此注解进行配置。
一、@JsonProperty 的重要功能



  • 自定义 JSON 键名:通过 @JsonProperty,你可以指定字段在序列化为 JSON 时应该利用的键名,或在反序列化时从 JSON 中获取值的键名。
  • 控制字段的可见性:即使字段不可见(如 private),只要利用了 @JsonProperty,Jackson 仍然可以访问它。
  • 用于字段和方法:@JsonProperty 可以应用于字段、getter 方法、setter 方法,乃至是构造函数的参数。
二、利用 @JsonProperty 的典型场景

真实开发应用场景参考–> 数据库存的JSON数据转为Map,key值是中文,转成英文,转为json数据传给前端
1). 自定义字段名称

假如 Java 类中的字段名与 JSON 属性名差别,你可以通过 @JsonProperty 进行映射。例如:
  1. import com.fasterxml.jackson.annotation.JsonProperty;
  2. public class User {
  3.    
  4.     @JsonProperty("名称")
  5.     private String name;
  6.     @JsonProperty("年龄")
  7.     private int age;
  8.     @JsonProperty("性别")
  9.     private String gender;
  10.     // Getters and Setters
  11.     public String getName() {
  12.         return name;
  13.     }
  14.     public void setName(String name) {
  15.         this.name = name;
  16.     }
  17.     public int getAge() {
  18.         return age;
  19.     }
  20.     public void setAge(int age) {
  21.         this.age = age;
  22.     }
  23.     public String getGender() {
  24.         return gender;
  25.     }
  26.     public void setGender(String gender) {
  27.         this.gender = gender;
  28.     }
  29. }
复制代码
在这个例子中:
“名称” 对应 name 字段。
“年龄” 对应 age 字段。
“性别” 对应 gender 字段。
这样,当 JSON 数据中利用 “名称”、“年龄”、“性别” 作为键名时,Jackson 能正确地将其映射到 User 对象中。
2). 控制序列化和反序列化

@JsonProperty 可以指定字段在序列化或反序列化时应利用的名称:
  1. public class User {
  2.    
  3.     @JsonProperty("名称")
  4.     private String name;
  5.     @JsonProperty("年龄")
  6.     private int age;
  7.     @JsonProperty("性别")
  8.     private String gender;
  9.     // 省略 getter 和 setter
  10. }
复制代码
当这个类被序列化为 JSON 时:
  1. {
  2.     "名称": "张三",
  3.     "年龄": 30,
  4.     "性别": "男"
  5. }
复制代码
3). 用于方法

你可以在 getter 或 setter 方法上利用 @JsonProperty,这允许你在保持字段名称稳定的同时自定义 JSON 的键名:
  1. public class User {
  2.    
  3.     private String name;
  4.     @JsonProperty("姓名")
  5.     public String getName() {
  6.         return name;
  7.     }
  8.     @JsonProperty("姓名")
  9.     public void setName(String name) {
  10.         this.name = name;
  11.     }
  12. }
复制代码
这样,name 字段会被映射为 “姓名”
4). 构造函数参数

@JsonProperty 也可以应用于构造函数参数,资助 Jackson 在反序列化时辨认 JSON 中的属性名:
  1. public class User {
  2.     private String name;
  3.     private int age;
  4.     public User(@JsonProperty("名称") String name, @JsonProperty("年龄") int age) {
  5.         this.name = name;
  6.         this.age = age;
  7.     }
  8.     // Getters and Setters
  9. }
复制代码
当 Jackson 利用这个构造函数创建对象时,它会利用 "名称" 和 "年龄" 来辨认 JSON 中的值。
三、长处



  • 机动性:@JsonProperty 提供了极大的机动性,允许你在不改变 Java 类字段名的情况下,自定义 JSON 数据的键名。
  • 广泛应用:它可以应用于类的字段、方法和构造函数,实用于各种序列化和反序列化需求。
  • 控制 JSON 输出:通过 @JsonProperty,你可以更准确地控制 JSON 的输出格式,确保数据与前端或其他系统的接口兼容。
这个注解在需要确保 JSON 数据布局与 Java 对象布局差别步时非常有用,尤其是在与外部系统集成时。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表