Jackson 是 Java 事实标准 JSON 库,因 Spring 深度集成和模块化设计占主导;其 ObjectMapper 默认不支持 LocalDateTime,需添加 jackson-datatype-jsr310 并注册 JavaTimeModule;@JsonIgnore 忽略字段、@JsonProperty 指定双向字段名、@JsonAlias 仅兼容反序列化别名;解析泛型集合须用 TypeReference 或 JsonNode,避免 ClassCastException。

Jackson 是 Java 里事实标准的 JSON 处理库
它不是唯一选择,但绝大多数 Spring Boot 项目、微服务接口、配置解析场景默认用的就是 Jackson。Gson 和 Fastjson 曾有各自优势,但现在除遗留系统外,新项目基本不推荐主动切换——Jackson 的模块化设计、注解丰富度、流式 API 和 Spring 深度集成能力,已形成明显代差。
为什么 ObjectMapper 默认不支持 LocalDateTime?
因为 ObjectMapper 原生只认 JDK 8 之前的 Date 和 Calendar,而 LocalDateTime 等新时间类型需要显式注册序列化/反序列化器。不配就报错:Cannot construct instance of java.time.LocalDateTime。
- 最简修复:添加
jackson-datatype-jsr310依赖,并注册模块 - Spring Boot 2.2+ 可直接在
application.yml加配置:spring: jackson: date-format: yyyy-MM-dd HH:mm:ss serialization: write-dates-as-timestamps: false - 手动注册示例:
ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule());
@JsonIgnore、@JsonProperty 和 @JsonAlias 怎么选?
三者解决不同问题,混用容易出错:
-
@JsonIgnore:彻底忽略字段(序列化 + 反序列化都不处理),适合敏感字段或临时冗余字段 -
@JsonProperty("user_name"):指定 JSON 字段名,**双向生效**;常用于下划线转驼峰 -
@JsonAlias({"userName", "user_name"}):仅作用于反序列化,允许多个别名兼容老接口,但输出仍按字段名或@JsonProperty定义
注意:@JsonProperty 如果只写在 getter 上,setter 不匹配别名会导致反序列化失败;建议统一加在字段上。
Delphi 7应用编程150例 CHM全书内容下载,全书主要通过150个实例,全面、深入地介绍了用Delphi 7开发应用程序的常用方法和技巧,主要讲解了用Delphi 7进行界面效果处理、图像处理、图形与多媒体开发、系统功能控制、文件处理、网络与数据库开发,以及组件应用等内容。这些实例简单实用、典型性强、功能突出,很多实例使用的技术稍加扩展可以解决同类问题。使用本书最好的方法是通过学习掌握实例中的技术或技巧,然后使用这些技术尝试实现更复杂的功能并应用到更多方面。本书主要针对具有一定Delphi基础知识
立即学习“Java免费学习笔记(深入)”;
JSON 字符串转 List
常见写法:
ObjectMapper mapper = new ObjectMapper(); List这样得到的是
List,不是 List,强转会崩。
- 正确写法必须用
TypeReference:List
- 泛型擦除是根本原因,
List.class在运行时无法还原嵌套泛型信息 - 如果只是临时解析,用
JsonNode更安全:JsonNode root = mapper.readTree(json); for (JsonNode node : root) { String name = node.path("name").asText(); }
这个坑几乎每个用 Jackson 解析动态结构的人早期都踩过,记住:只要带泛型,就得用 TypeReference 或 JsonNode。









