com.fasterxml.jackson.databind.ObjectMapper
是Jackson库的核心类,负责JSON序列化与反序列化的重任。本文旨在详细介绍其成员属性和方法,帮助开发者更好地利用Jackson进行Java对象与JSON数据之间的转换操作。
初始化与配置
构造与复制
- 默认构造函数:创建一个默认配置的ObjectMapper实例。
copy()
:创建当前实例的一个深拷贝,便于修改配置而不影响原实例。_checkInvalidCopy()
:内部方法,用于检查复制操作的有效性。- 配置相关方法:如
setDefaultPrettyPrinter
,setDateFormat
,setTimeZone
等,允许用户自定义ObjectMapper的行为和格式。
输入输出流处理
- 生成器与解析器创建:
- 如
createGenerator(OutputStream out)
、createParser(InputStream in)
等,用于创建JSON生成器和解析器,支持多种输入输出形式。
读写方法:
readValue(String content, Class<T> valueType)
:从字符串内容中读取指定类型的Java对象。
writeValue(OutputStream out, Object value)
:将Java对象写入输出流为JSON格式。
类型解析与注册
- 类型工厂:通过
getTypeFactory()
获取类型工厂,用于处理复杂的类型映射。 - 类型解析器:如
_constructDefaultTypeResolverBuilder()
,构建默认类型解析器,用于处理泛型等复杂类型。
- 子类型注册:
registerSubtypes(Class<?>... subtypes)
,注册子类型以支持泛型和继承的序列化/反序列化。
注解与命名策略
- 注解处理器:通过
setAnnotationIntrospector
设置注解处理器,用于解析类和属性上的Jackson注解。 - 属性命名策略:如
setPropertyNamingStrategy
,定义如何将Java属性名映射到JSON键名。
默认类型处理
- 默认类型包含:
activateDefaultTyping
系列方法,控制是否在序列化时包含类型信息,这对于多态序列化尤为重要。
- 类型验证器:通过
setPolymorphicTypeValidator
确保类型安全,防止不安全的类型转换。
混入(Mix-ins)
- 混入注解:
addMixIn(Class<?> target, Class<? extends Object> mixinSource)
,允许为未直接控制的类添加行为或序列化特性。
配置覆盖与定制
- 配置覆盖:
configOverride(Class<?> configClass)
,对特定类型单独配置序列化/反序列化行为。 - 强制转换配置:
coercionConfigDefaults()
,全局配置类型转换规则。
问题处理与错误管理
- 问题处理器:
addHandler(JsonMappingException.Handler handler)
,注册异常处理器,自定义错误处理逻辑。
树模型操作
- 创建JSON树:如
createObjectNode()
、createArrayNode()
,用于直接操作JSON结构,而非直接与Java对象互转。
- 树与值转换:
treeToValue(TreeNode n, Class<V> valueType)
、valueToTree(Object fromValue)
,在树模型与Java对象之间转换。
总结
ObjectMapper
提供了一套强大且灵活的API,覆盖了从简单到复杂的JSON处理需求。通过上述方法,开发者不仅能实现基本的序列化和反序列化,还能进行细致的配置调整,以满足特定应用场景下的要求。了解并熟练运用这些方法,是高效使用Jackson库的基础。