当前位置: 首页 > news >正文

【注解】@JsonProperty 详解

@JsonProperty 详解

    • `@JsonProperty`
      • 一、`@JsonProperty` 的主要功能
      • 二、使用 `@JsonProperty` 的典型场景
        • 1). 自定义字段名称
        • 2). 控制序列化和反序列化
        • 3). 用于方法
        • 4). 构造函数参数
      • 三、优点

@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 进行映射。例如:

import com.fasterxml.jackson.annotation.JsonProperty;public class User {@JsonProperty("名称")private String name;@JsonProperty("年龄")private int age;@JsonProperty("性别")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;}
}

在这个例子中:

“名称” 对应 name 字段。
“年龄” 对应 age 字段。
“性别” 对应 gender 字段。
这样,当 JSON 数据中使用 “名称”、“年龄”、“性别” 作为键名时,Jackson 能正确地将其映射到 User 对象中。

2). 控制序列化和反序列化

@JsonProperty 可以指定字段在序列化或反序列化时应使用的名称:

public class User {@JsonProperty("名称")private String name;@JsonProperty("年龄")private int age;@JsonProperty("性别")private String gender;// 省略 getter 和 setter
}

当这个类被序列化为 JSON 时:

{"名称": "张三","年龄": 30,"性别": "男"
}
3). 用于方法

你可以在 getter 或 setter 方法上使用 @JsonProperty,这允许你在保持字段名称不变的同时自定义 JSON 的键名:

public class User {private String name;@JsonProperty("姓名")public String getName() {return name;}@JsonProperty("姓名")public void setName(String name) {this.name = name;}
}

这样,name 字段会被映射为 “姓名”

4). 构造函数参数

@JsonProperty 也可以应用于构造函数参数,帮助 Jackson 在反序列化时识别 JSON 中的属性名:

public class User {private String name;private int age;public User(@JsonProperty("名称") String name, @JsonProperty("年龄") int age) {this.name = name;this.age = age;}// Getters and Setters
}

当 Jackson 使用这个构造函数创建对象时,它会使用 "名称""年龄" 来识别 JSON 中的值。

三、优点

  • 灵活性:@JsonProperty 提供了极大的灵活性,允许你在不改变 Java 类字段名的情况下,自定义 JSON 数据的键名。
  • 广泛应用:它可以应用于类的字段、方法和构造函数,适用于各种序列化和反序列化需求。
  • 控制 JSON 输出:通过 @JsonProperty,你可以更精确地控制 JSON 的输出格式,确保数据与前端或其他系统的接口兼容。

这个注解在需要确保 JSON 数据结构与 Java 对象结构不同步时非常有用,尤其是在与外部系统集成时。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 流媒体服务器二 3学习 librtmp 库的配置使用
  • 华大flash EFM使用(一)
  • 《重温JavaScript五子棋小游戏》
  • ArcGIS热点分析 (Getis-Ord Gi*)——基于地级市尺度的七普人口普查数据的热点与冷点分析
  • Leetcode-day28-贪心算法
  • 打印样式的艺术:用CSS @media 规则优化页面输出
  • 网络udp及ipc内存共享
  • FPGA工程师成长路线(持续更新ing,欢迎补充)
  • Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)
  • 从PDF到图片:四款工具助你玩转文档转换!
  • [云计算] 虚拟化笔记
  • 【数据结构3】哈希表、哈希表的应用(集合与字典、md5算法和文件的哈希值)
  • MyBatis框架搭建与代码解读
  • 分形比特币(Fractal Bitcoin)
  • 基于Open Cv的数字图像手势识别系统,Python编程实现,可以识别以下6种手势,含代码和报告
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • classpath对获取配置文件的影响
  • css选择器
  • Git 使用集
  • JavaScript 基本功--面试宝典
  • java取消线程实例
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • vue-router 实现分析
  • vue数据传递--我有特殊的实现技巧
  • Vue小说阅读器(仿追书神器)
  • vue学习系列(二)vue-cli
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 嵌入式文件系统
  • 算法系列——算法入门之递归分而治之思想的实现
  • 通信类
  • 学习JavaScript数据结构与算法 — 树
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 湖北分布式智能数据采集方法有哪些?
  • # .NET Framework中使用命名管道进行进程间通信
  • # Redis 入门到精通(七)-- redis 删除策略
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (1)(1.11) SiK Radio v2(一)
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (NSDate) 时间 (time )比较
  • (WSI分类)WSI分类文献小综述 2024
  • (备份) esp32 GPIO
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)uboot源码分析
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)程序员疫苗:代码注入
  • (转)大型网站架构演变和知识体系
  • ******之网络***——物理***
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core 中插件式开发实现
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .NET4.0并行计算技术基础(1)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接