Jackson是什么
一句话版本
Jackson 是目前 Java 世界里 最常用、最老牌、最轻量级 的 JSON 处理库,Spring Boot 默认就把它装进项目,帮你 把 Java 对象 ⇄ JSON 字符串 来回转换,不需要你手写 getJSONObject
、put("xxx")
这些繁琐代码。
- 它到底能干啥?
-
序列化:Java Bean → JSON
User user = new User(1,"Tom");
String json = objectMapper.writeValueAsString(user);
得到:{"id":1,"name":"Tom"}
-
反序列化:JSON → Java Bean
User u = objectMapper.readValue("{\"id\":1,\"name\":\"Tom\"}", User.class);
-
树模型:JSON 当 DOM 一样遍历
JsonNode node = objectMapper.readTree(json);
-
流式 API:超大 JSON 读写时省内存(类似 XML 的 StAX)
-
为什么叫 Jackson?
纯属作者起名爱好,和 Michael Jackson 没任何关系 😄。 -
在 Spring Boot 里的地位
starter-web 已经自带spring-boot-starter-json
,核心依赖就是 Jackson。
所以给前端返回对象时,你写的代码只是:
@GetMapping("/user")
public User getUser() {return userService.get(1); // Spring 自动调用 Jackson 把 User 转成 JSON
}
- 三个常用 jar
- jackson-core:流式解析器,底层 JSON 读写
- jackson-annotations:提供 @JsonFormat、@JsonIgnore 等注解
- jackson-databind:高层对象映射,最常用,实际开发基本只感知它
-
同类竞品
Google Gson、阿里巴巴 Fastjson、JSON-B(Java EE 官方标准)。
它们都能做 JSON 转换,但 Jackson 功能最全、社区最大、Spring 默认,所以市占率最高。 -
一句话记住
Jackson 就是 Java 界的“JSON 翻译官”,你只管写 Java Bean,它负责帮你变成 JSON 发出去,再把收到的 JSON 变回 Java 对象。
Jackson注解
这段注解:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime estimatedDeliveryTime;
是 Jackson(Spring Boot 默认的 JSON 序列化/反序列化库)提供的,用来告诉它:
“把
estimatedDeliveryTime
这个LocalDateTime
字段,当成字符串输出/输入,格式必须是yyyy-MM-dd HH:mm:ss
,别给我整成数组或时间戳。”
逐条拆解:
-
@JsonFormat
Jackson 的注解,只管 JSON 序列化与反序列化,跟数据库、JPA、MyBatis 无关。 -
shape = JsonFormat.Shape.STRING
指定“JSON 中的形态”是字符串。
如果不写,Jackson 默认会把LocalDateTime
序列化成 数组 形式:
[2025,10,15,14,30,45]
—— 对人眼极不友好。
声明为STRING
后,就会变成:
"2025-10-15 14:30:45"
。 -
pattern = "yyyy-MM-dd HH:mm:ss"
当shape=STRING
时,必须告诉 Jackson 用哪个格式去 解析 和 输出。
这里用的是最常见的“年月日 时分秒”格式。
注意大小写:yyyy
四位的年MM
两位的月dd
两位的日HH
24 小时制的小时mm
分钟ss
秒
-
作用范围
- 序列化(Java → JSON):服务端返回给前端时,按指定格式转成字符串。
- 反序列化(JSON → Java):前端把字符串
"2025-10-15 14:30:45"
传过来时,Jackson 能自动解析成LocalDateTime
。
-
与
@DateTimeFormat
区别@JsonFormat
管 JSON(前后端交互)。@DateTimeFormat
管 表单/URL 参数(application/x-www-form-urlencoded
),对 JSON 无效。
一句话总结:
@JsonFormat(shape = STRING, pattern = "yyyy-MM-dd HH:mm:ss")
就是 让 Jackson 把 LocalDateTime 当固定格式的字符串来回转换,既好看又不易出错。