Jackson 入门

发布时间:2026/7/1 19:29:43
Jackson 入门 目录一、Jackson 是什么二、核心组件2.1 jackson-core2.2 jackson-databind(最核心)2.3 jackson-annotations三、一句话核心四、实战入门(手把手)4.1 创建项目4.2 准备一个 Java 类4.3 第一步:Java 对象 → JSON(序列化)4.4 第二步:JSON → Java 对象(反序列化)4.5 完整代码(复制就能跑)五、ObjectMapper 配置(面试重点)面试考点:什么叫 FAIL_ON_UNKNOWN_PROPERTIES?六、常用注解6.1 @JsonProperty — 指定 JSON 字段名6.2 @JsonIgnore — 忽略某个字段6.3 @JsonFormat — 日期格式化6.4 @JsonInclude — 控制字段是否包含6.5 @JsonCreator — 支持有参构造器反序列化七、复杂场景7.1 处理泛型 List7.2 处理泛型 Map7.3 JSON 转 JsonNode(灵活解析)八、ObjectMapper 单例(重要)九、问题总结十、一句话速记一、Jackson 是什么Jackson 是 Java 生态中最主流的JSON 处理框架,由 FasterXML 公司维护。核心能力:Java 对象 ↔ JSON 字符串 的相互转换(序列化 / 反序列化)。为什么学它:Spring Boot 默认集成的 JSON 库,几乎所有 Java 项目都在用大厂新项目标配,面试高频考点比 Fastjson 安全、稳定、扩展性强二、核心组件Jackson 由三个 jar 包组成,但通常你只需要知道它们谁干了什么:2.1 jackson-core核心流式解析 API,提供JsonParser(读)和JsonGenerator(写)。底层基础,一般你不会直接用它,就像写代码不会直接用字节流而是用 BufferedReader 一样。2.2 jackson-databind(最核心)对象映射,提供ObjectMapper——这是你最常用的类。负责把 Java 对象 ⇄ JSON,你 90% 的 Jackson 代码都是跟 ObjectMapper 打交道。2.3 jackson-annotations注解支持,让你通过注解控制序列化行为。ObjectMapper(数据绑定) ↑ 依赖于 jackson-annotations(注解) ↑ 依赖于 jackson-core(流式读写)其实你不需要记这些依赖关系,因为 Spring Boot 的spring-boot-starter-web已经帮你全拉进来了。三、一句话核心JSON 字符串 ⇄ Java 对象(POJO)Java 对象 →→(序列化)→→ JSON 字符串 JSON 字符串 →→(反序列化)→→ Java 对象四、实战入门(手把手)4.1 创建项目随便一个 Maven 项目,如果你用的是 Spring Boot,什么都不用加,Jackson 已经在了。如果是普通 Java 项目,pom.xml 加:dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.15.2/version /dependency它会自动把 core 和 annotations 也拉进来。4.2 准备一个 Java 类public class User { private String name; private int age; private String email; ​ // ⚠️ 必须有 无参构造器!Jackson 反序列化时默认通过无参构造创建对象 public User() {} ​ // 有参构造(方便测试) public User(String name, int age, String email) { this.name = name; this.age = age; this.email = email; } ​ // ⚠️ 必须有 getter/setter!Jackson 通过 getter 读字段、setter 写字段 public 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 getEmail() { return email; } public void setEmail(String email) { this.email = email; } ​ @Override public String toString() { return "User{name='" + name + "', age=" + age + ", email='" + email + "'}"; } }⚠️三个必须:必须有无参构造器必须有 getter(序列化时读值)必须有 setter(反序列化时赋值)为什么?因为 Jackson 反序列化时是先调无参构造 new 一个空对象,然后调 setter 把 JSON 里的值填进去。没有无参构造,new 不出来。没有 setter,值填不进去。4.3 第一步:Java 对象 → JSON(序列化)import com.fasterxml.jackson.databind.ObjectMapper; ​ public class JacksonDemo { public static void main(String[] args) throws Exception { // 1. 创建 ObjectMapper(它是线程安全的,全局一个就够了) ObjectMapper mapper = new ObjectMapper(); ​ // 2. 准备一个 Java 对象 User user = new User("张三", 25, "zhangsan@example.com"); ​ // 3. 序列化:对象 → JSON 字符串 String json = mapper.writeValueAsString(user); n