jackson 反序列化核心是 objectmapper.readvalue,需配无参构造、getter/setter;字段名不一致用 @jsonproperty 或 snake_case 策略;泛型集合须用 typereference 或 collectiontype;应禁用未知字段报错、注册 javatimemodule 处理日期。

用 Jackson 把 JSON 字符串转成 Java 对象,核心就是 ObjectMapper 的 readValue 方法。关键不在“能不能转”,而在于“怎么配、怎么写、怎么避坑”。
基础反序列化:三步到位
只要 JSON 结构和 Java 类匹配,操作非常直接:
- 确保目标类有无参构造函数(Jackson 需要实例化对象)
- 字段建议提供 getter/setter(非强制但更稳定)
- 调用
objectMapper.readValue(jsonString, User.class)
例如:{"name":"Alice","age":28} 可直接映射到含 name 和 age 字段的 User 类。
字段名不一致?用 @JsonProperty 或全局策略
JSON 是 user_name,Java 是 userName,两种处理方式:
基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
- 单字段标注:
@JsonProperty("user_name") private String userName; - 全局启用下划线转驼峰:
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
注意:Jackson 默认不自动做下划线→驼峰转换,必须显式配置策略。
处理泛型集合(如 List- )不能只传 Item.class
Java 泛型擦除会导致类型信息丢失,直接写 List.class 会出错。正确做法是:
- 用
TypeReference匿名子类保留泛型:objectMapper.readValue(json, new TypeReference<list>>() {});</list> - 或配合
CollectionType构造:CollectionType type = objectMapper.getTypeFactory().constructCollectionType(List.class, Item.class);<br>objectMapper.readValue(json, type);
容错与健壮性:未知字段、空值、时间格式
生产环境常见问题需要提前配置:
- 忽略 JSON 中多出的字段(避免抛
UnrecognizedPropertyException):objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - 允许 JSON 字段为 null 或缺失时设为默认值(如 0、""):
objectMapper.setDefaultSetterInfo(SetterInfo.forNulls());或配合@JsonInclude(Include.NON_NULL)控制序列化,反序列化本身默认接受 null - 日期字段反序列化失败?统一配格式:
objectMapper.registerModule(new JavaTimeModule());(推荐 Java 8+ 时间类)
或针对Date类型:objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










