Jackson ObjectMapper

是什么

  • 来自 Jackson 库(com.fasterxml.jackson.databind.ObjectMapper
  • 核心职责:Java 对象 ↔ JSON 的双向转换
  • Spring Boot 项目中会自动配置,可直接注入使用
  • 线程安全,应复用单例,无需每次 new

核心方法

序列化(Java → JSON)

方法说明返回值
writeValueAsString(obj)对象 → JSON 字符串String
writeValueAsBytes(obj)对象 → JSON 字节数组byte[]
writeValue(File, obj)对象 → JSON 写入文件void
writerWithDefaultPrettyPrinter()格式化输出的 WriterObjectWriter

反序列化(JSON → Java)

方法说明返回值
readValue(jsonStr, Class)JSON 字符串 → 指定类型T
readValue(jsonStr, TypeReference)JSON 字符串 → 泛型类型(解决泛型擦除)T
readTree(jsonStr)JSON → JsonNode 树模型JsonNode

常用配置

// 忽略 JSON 中有但 Java 类没有的字段
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
// 仅序列化非 null 字段
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
 
// 日期格式化
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
 
// 注册 Java 8 时间模块(LocalDateTime 等)
objectMapper.registerModule(new JavaTimeModule());

注意事项

  • 循环引用:默认会抛异常,可通过 SerializationFeature.FAIL_ON_SELF_REFERENCES 控制
  • 泛型擦除:反序列化泛型类型(如 List<User>)时必须用 TypeReference
  • Java 8 时间LocalDateTime 等需要 JavaTimeModule,否则序列化失败
  • 线程安全ObjectMapper 是线程安全的,应作为单例复用

相关笔记