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

jackson 中常用注解说明

Jackson 是一个流行的 JSON 序列化和反序列化库,提供了丰富的注解来控制对象与 JSON 之间的转换过程。以下是 Jackson 中常用的注解及其说明:

1. @JsonProperty

用于指定 JSON 中的字段名与 Java 对象字段之间的映射。可以用于序列化和反序列化过程。

@JsonProperty("custom_name")
private String name;

说明:将 Java 对象的 name 字段映射为 JSON 中的 custom_name 字段,反之亦然。


2. @JsonAlias

允许多个别名字段映射到同一个 Java 字段(仅适用于反序列化)。

@JsonAlias({"name", "alias_name"})
private String label;

说明:JSON 中如果有 namealias_name 字段,都将映射到 label 字段。


3. @JsonIgnore

用于忽略某个字段,不将其序列化或反序列化。

@JsonIgnore
private String password;

说明password 字段不会出现在序列化的 JSON 中,反序列化时也会被忽略。


4. @JsonIgnoreProperties

用于在类级别忽略多个字段。

@JsonIgnoreProperties({"field1", "field2"})
public class MyClass { }

说明field1field2 字段在序列化和反序列化过程中将被忽略。


5. @JsonInclude

控制哪些字段会被序列化。可以根据字段值是否为 null 或默认值来决定是否序列化。

@JsonInclude(JsonInclude.Include.NON_NULL)
private String middleName;

说明middleName 字段仅在不为 null 时才会被序列化。


6. @JsonFormat

用于格式化日期、时间或其他格式的字段。

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date birthDate;

说明birthDate 字段会以 yyyy-MM-dd 格式序列化为字符串。


7. @JsonCreator

用于指定 Jackson 在反序列化时使用的构造函数或静态工厂方法。

public class User {private String name;private int age;@JsonCreatorpublic User(@JsonProperty("name") String name, @JsonProperty("age") int age) {this.name = name;this.age = age;}
}

说明:指定 Jackson 使用带有 @JsonCreator 的构造函数来反序列化对象。


8. @JsonSetter

用于指定反序列化时设置字段的 setter 方法。

@JsonSetter("name")
public void setFullName(String name) {this.name = name;
}

说明:指定反序列化时,JSON 中的 name 字段会调用 setFullName 方法。


9. @JsonGetter

用于指定序列化时获取字段的 getter 方法。

@JsonGetter("name")
public String getFullName() {return this.name;
}

说明:序列化时,getFullName 方法的返回值会映射到 JSON 中的 name 字段。


10. @JsonAnyGetter@JsonAnySetter

允许将动态属性映射到 Map 中,适用于未知或动态的 JSON 字段。

@JsonAnyGetter
public Map<String, Object> getProperties() {return properties;
}@JsonAnySetter
public void setProperty(String key, Object value) {properties.put(key, value);
}

说明:这些注解允许在 JSON 中的任意字段与 Map 的键值对之间进行映射。


11. @JsonAutoDetect

控制 Jackson 自动检测哪些字段和方法需要序列化和反序列化。

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class MyClass { }

说明:可以指定字段、方法的可见性,如 ANY 表示所有字段都可被检测。


12. @JsonUnwrapped

用于将对象的字段直接展平在父级 JSON 对象中,而不是作为嵌套对象。

public class Name {private String firstName;private String lastName;
}public class User {@JsonUnwrappedprivate Name name;
}

说明:会将 name 对象的字段展平在 User 对象的 JSON 中,如 { "firstName": "John", "lastName": "Doe" }


13. @JsonRawValue

用于输出未转义的原始 JSON 内容。

@JsonRawValue
private String rawJson = "{\"key\": \"value\"}";

说明rawJson 字段会被直接输出为 {"key": "value"},而不是作为字符串输出。


14. @JsonDeserialize@JsonSerialize

用于指定自定义的序列化和反序列化器。

@JsonDeserialize(using = CustomDeserializer.class)
@JsonSerialize(using = CustomSerializer.class)
private Date date;

说明:可以为某个字段指定自定义的序列化和反序列化逻辑。


这些注解帮助你精确控制对象和 JSON 之间的转换过程,从字段映射到日期格式化,再到忽略特定字段,Jackson 提供了强大的工具来满足各种需求。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Leetcode 3282. Reach End of Array With Max Score
  • JVM源码解析
  • 第一篇 第3章 不确定型分析 第4章 设备更新分析 第5章价值工程
  • 多个vue项目部署到nginx服务器
  • Java 21的Preferences API的笔记
  • java 长连接中的sse与websocket含义, 两者的区别
  • 【Java】解决项目启动时端口被占用
  • 相互作用先验下的 3D 分子生成扩散模型 - IPDiff 评测
  • 顶级AI框架用于构建聊天机器人
  • linux从0到1 基础完整知识
  • k8s环境搭建
  • Redis中String类型的基本命令
  • 工作分享,小红书企业內推码附送
  • 职业技能大赛背景下的移动互联网应用软件开发(Android)实训室建设方案
  • 由于安装nvm 引发的vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  • [译]如何构建服务器端web组件,为何要构建?
  • 【个人向】《HTTP图解》阅后小结
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • If…else
  • Java 网络编程(2):UDP 的使用
  • JavaScript 基本功--面试宝典
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Linux各目录及每个目录的详细介绍
  • quasar-framework cnodejs社区
  • Spring Boot快速入门(一):Hello Spring Boot
  • vue自定义指令实现v-tap插件
  • 第2章 网络文档
  • 讲清楚之javascript作用域
  • 前端面试之CSS3新特性
  • 前端面试总结(at, md)
  • 前端性能优化--懒加载和预加载
  • 树莓派 - 使用须知
  • 学习HTTP相关知识笔记
  • 学习使用ExpressJS 4.0中的新Router
  • 在weex里面使用chart图表
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #《AI中文版》V3 第 1 章 概述
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (4.10~4.16)
  • (9)目标检测_SSD的原理
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (day 12)JavaScript学习笔记(数组3)
  • (南京观海微电子)——I3C协议介绍
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (学习日记)2024.01.19
  • (转)Linux下编译安装log4cxx
  • .NET Micro Framework初体验
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • @EnableWebMvc介绍和使用详细demo
  • @Not - Empty-Null-Blank