Jackson 中的 ObjectMapper 类

2025年3月17日 | 阅读 14 分钟

ObjectMapperJackson 库中最重要的类之一。它用于读写 JSON 数据。它负责从 POJO 文件读取数据或向 POJO 文件写入数据,以及与 JSON 树模型进行交互。

ObjectMapper 类具有以下特点:

  1. 它支持 **多态** 和 **对象识别** 等高级概念。
  2. 它高度可定制,可以处理不同风格的 JSON 内容。
  3. 它充当高级 ObjectReaderObjectWriter 类的工厂。

ObjectMapper 类声明如下:

嵌套类

下表定义了扩展 ObjectMapper 类或可以称之为 ObjectMapper 类嵌套的类。

Class描述
DefaultTypeResolverBuilder这是一个自定义的 TypeResolverBuilder 类,用于获取我们可以与 **“默认类型”** 一起使用的类型解析器构建器。
DefaultTyping为了指定类型种类,枚举与 enableDefaultTyping() 方法一起使用。

现在,让我们来理解 ObjectMapper 类的字段、构造函数和方法。

ObjectMapper 类的字段

protected DefaultDeserializationContext _deserializationContext

这是一个蓝图上下文对象,用于允许自定义子类。

protected DeserializationConfig _deserializationConfig

这是一个配置对象,用于定义反序列化过程的基本全局设置。

protected JsonFactory jsonFactory

JsonFactory 用于创建 JsonParser 和 JsonGenerator 的实例。

protected InjectableValues _injectableValues

这是一个提供程序,用于将值注入到反序列化的 POJO 中。

protected ConfigOverrides _propertyOverrides

用于访问当前活动的每种配置覆盖。

protected SimpleMixInResolver _mixIns

这是一个映射,用于定义应用 mix-in 注解的方式。映射如下:

键:接收附加注解的类型。

值:包含要“混合”的注解的类型。

protected Set<Object> _registeredModuleTypes

这是一个 Set,用于定义已注册的模块类型的集合。

protected SerializationConfig _serializationConfig

这也是一个配置对象,用于定义序列化过程的基本全局设置。

protected ConcurrentHashMap<JavaType,JsonDeserializer<Object>> _rootDeserializers

这是一个 Map,用于跟踪根级反序列化器。它是一个主级 Map。

protected SerializerFactory _serializerFactory

这是一个用于构造序列化器的工厂。

protected SubtypeResolver _subtypeResolver

用于根据需要注册子类型并为父/子类型解决它们。

protected TypeFactory _typeFactory

这是一个用于创建 JavaType 实例的工厂。它们是允许模块添加更多自定义类型处理所必需的。

protected DefaultSerializerProvider _serializerProvider

这是一个负责管理用于序列化的序列化器访问的对象。

protected static BaseSettings DEFAULT_BASE

这是基础设置,包含所有 ObjectMapper 实例的默认值。

ObjectMapper 类的构造函数

ObjectMapper 类有以下构造函数:

构造函数描述
ObjectMapper()这是一个默认构造函数,用于构造一个使用默认 JsonFactory、SerializerProviderBeanSerializerFactory 的实例。
ObjectMapper(JsonFactory factory )用于构造一个使用给定 JsonFactory 的实例。给定的 JsonFactory 用于构造 JsonParsers 和/或 JsonGenerators
ObjectMapper(JsonFactory factory, SerializerProvider provider1, DeserializerProvider provider2)用于构造一个使用给定的 JsonFactory、SerializerProviderDeserializerProvider 的实例。给定的 JsonFactory 用于构造 JsonParsers 和/或 JsonGenerators
protected ObjectMapper(ObjectMapper mapper)这是一个拷贝构造函数,用于支持 copy() 方法。

ObjectMapper 类的方法

ObjectMapper 类定义了以下方法:

方法返回值描述
_checkInvalidCopy(Class<?> exp)void用于检查无效的拷贝。
_configAndWriteValue(JsonGenerator g, Object value)void用于在必要时配置生成器,然后执行写入功能。
_convert(Object fromValue, JavaType toValueType)Object用于获取实际的转换实现。此处,不使用读写方法。
_initForReading(JsonParser p)JsonToken用于确保给定的解析器是否已准备好读取数据绑定内容。
_findRootDeserializer(DeserializationContext ctxt, JavaType valueType)JsonDeserializer<Object>如果我们要查找传递的根级别值的反序列化器,则使用此方法。
_newReader(DeserializationConfig config)
类似的方法
  1. _newReader(DeserializationConfig config, JavaType valueType, Object valueToUpdate, FormatSchema schema, InjectableValues injectableValues)
ObjectReader这是一个工厂方法,即用于获取 ObjectReader 实例的适当子类型。为了使用此方法,子类必须覆盖它。
_newWriter(SerializationConfig config)
类似的方法
  1. _newWriter(SerializationConfig config, FormatSchema schema)
  2. _newWriter(SerializationConfig config, JavaType rootType, PrettyPrinter pp)
ObjectWriter这是一个工厂方法,即用于获取 ObjectWriter 实例的适当子类型。为了使用此方法,子类必须覆盖它。
_readValue(DeserializationConfig cfg, JsonParser p, JavaType valueType)Object用于获取定义值读取和绑定操作的对象。
_serializerProvider(SerializationConfig config)DefaultSerializerProvider这是一个可覆盖的辅助方法,用于构造 SerializerProvider。
acceptJsonFormatVisitor(Class<?> type, JsonFormatVisitorWrapper visitor)
类似的方法
  1. acceptJsonFormatVisitor(JavaType type, JsonFormatVisitorWrapper visitor)
void
void
如果我们想使用指定的访问器访问特定类型的类型层次结构,则使用此方法。
addHandler(DeserializationProblemHandler h)ObjectMapper为了处理反序列化过程中发生的特定问题,我们使用指定的 DeserializationProblemHandler,并使用此方法添加处理程序。
addMixIn(Class<?> target, Class<?> mixinSource)ObjectMapper为了使用 mix-in 注解来指定增强类或接口,我们使用此方法来添加它。
canDeserialize(JavaType type)Boolean用于检查映射器是否可以反序列化指定类型的对象。
canDeserialize(JavaType type, AtomicReference<Throwable> cause)Boolean与前一个方法类似。唯一的区别是它可以返回在构造序列化器时抛出的可抛出对象。可抛出对象可用于确定实际问题。
canSerialize(Class<?> type)Boolean用于检查映射器是否可以序列化指定类型的对象。
canSerialize(Class<?> type, AtomicReference<Throwable> cause)Boolean与前一个方法类似。唯一的区别是它可以返回在构造序列化器时抛出的可抛出对象。可抛出对象可用于确定实际问题。
clearProblemHandlers()ObjectMapper这是用于从映射器中删除所有已注册的 DeserializationProblemHandlers 实例的方法之一。
configure(DeserializationFeature f, boolean state)
类似的方法
  1. configure(JsonGenerator.Feature f, boolean state)
  2. configure(JsonParser.Feature f, boolean state)
  3. configure(MapperFeature f, boolean state)
  4. configure(SerializationFeature f, boolean state)
ObjectMapper用于更改 ObjectMapper、生成器实例、解析器实例、映射器实例或 ObjectMapper 的反序列化、Json Generator、JsonParser、Mapper 或 Serialization 功能的开启/关闭状态。
constructType(Type t)JavaType如果我们想在没有显式上下文的情况下从给定类型构造 JavaType,则使用此方法。
convertValue(Object fromValue, ClasstoValueType)
类似的方法
  1. convertValue(Object fromValue, JavaType toValueType)
T如果我们想执行两步转换,将给定值转换为给定值类型的实例,则使用 converValue() 方法。
createArrayNode()ArrayNode用于创建 ArrayNode。
defaultClassIntrospector()ClassIntrospector如果我们想使用默认的 ClassIntrospector,则使用此可覆盖的辅助方法来构造它。
disable(DeserializationFeature feature)
类似的方法
  1. disable(DeserializationFeature first, DeserializationFeature... f)
  2. disable(JsonGenerator.Feature... features)
  3. disable(JsonParser.Feature... features)
  4. disable(MapperFeature... f)
  5. disable(SerializationFeature f)
  6. disable(SerializationFeature first, SerializationFeature... f)
ObjectMapper用于禁用给定反序列化配置、解析器实例的 JsonGenerator 特性、对象映射器的解析器实例的 JsonParser 特性。
disableDefaultTyping()ObjectMapper很多时候,我们需要禁用类型信息的自动包含,为此,我们使用此方法。
enable(DeserializationFeature feature)
  1. enable(DeserializationFeature first, DeserializationFeature... f)
  2. enable(JsonGenerator.Feature... features)
    enable(JsonParser.Feature... features)
  3. enable(MapperFeature... f)
  4. enable(SerializationFeature f)
  5. enable(SerializationFeature first, SerializationFeature... f)
ObjectMapper用于启用给定反序列化配置、解析器实例的 JsonGenerator 特性、对象映射器的解析器实例的 JsonParser 特性。
enableDefaultTyping()
类似的方法
  1. enableDefaultTyping(ObjectMapper.DefaultTyping dti)
  2. enableDefaultTyping(ObjectMapper.DefaultTyping applicability, JsonTypeInfo.As includeAs)
  3. enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping applicability, String propertyName)
ObjectMapper为了反序列化多态类型时使用类型信息的自动包含,我们使用此方法来启用它。
findAndRegisterModules()ObjectMapper这类似于 mapper.registerModules(mapper.findModules()) 方法。
findModules()
类似的方法
  1. findModules(ClassLoader classLoader)
List<Module>用于定位可用的模块。该方法使用模块提供的 SPI 来使用 JDK ServiceLoader 机制。
getDateFormat()DateFormat用于获取日期的格式。
getDeserializationConfig()DeserializationConfig用于获取共享的默认 DeserializationConfig 对象。返回的对象定义了反序列化的配置设置。
getDeserializationContext()DeserializationContext用于获取当前的 DeserializationContext。
getFactory()JsonFactory如果映射器需要构造 Json 解析器和生成器,它需要 json 工厂,并且为了获取它,我们使用 getFactory() 方法。
getInjectableValues()InjectableValues用于获取可注入的值。
getJsonFactory()JsonFactory这是一个已弃用的获取 Json 工厂的方法。
getNodeFactory()JsonNodeFactory用于获取映射器在直接构造树的根 JsonNode 实例时使用的 JsonNodeFactory。
getPropertyNamingStrategy()PropertyNamingStrategy顾名思义,它用于属性的命名策略。
getSerializationConfig()SerializationConfig用于获取共享的默认 SerializationConfig 对象。返回的对象定义了序列化的配置设置。
getSerializerFactory()SerializerFactory用于获取当前的 SerializerFactory。
getSerializerProvider()SerializerProvider这是一个工厂的访问器,用于通过调用 DefaultSerializerProvider.createInstance(SerializationConfig, SerializerFactory) 来创建实例。
getSerializerProviderInstance()SerializerProvider这是一个访问器,用于构造并返回一个 SerializerProvider 实例,我们可以使用它来访问序列化器。
getSubtypeResolver()SubtypeResolver用于访问正在使用的子类型解析器。
getTypeFactory()TypeFactory这是一个访问器,用于获取当前配置的 TypeFactory 实例。
getVisibilityChecker()VisibilityChecker<?>用于访问当前配置的可视性检查器。
isEnabled(DeserializationFeature f)
类似的方法
  1. isEnabled(JsonFactory.Feature f)
  2. isEnabled(JsonGenerator.Feature f)
  3. isEnabled(JsonParser.Feature f)
  4. isEnabled(MapperFeature f)
  5. isEnabled(SerializationFeature f)
BooleanisEnabled() 方法及其变体用于检查给定的反序列化特定、JsonFactory、JsonGenerator、JsonParser、Mapper 或 Serialization 功能是否已启用。
mixInCount()int用于获取 mixIn 的计数。
reader()
类似的方法
  1. reader(Base64Variant defaultBase64)
  2. reader(Class<?> type)
  3. reader(ContextAttributes attrs)
  4. reader(DeserializationFeature feature)
  5. reader(DeserializationFeature first, DeserializationFeature... other)
  6. reader(FormatSchema schema)
  7. reader(InjectableValues injectableValues)
  8. reader(JavaType type)
  9. reader(JsonNodeFactory f)
  10. reader(TypeReference<?> type)
ObjectReaderreader() 方法及其变体是用于构造 ObjectReader 实例的工厂方法。根据需要,我们可以传递 Base64 编码变体用于 Base64 编码的二进制数据、默认属性、启用的功能、可注入的值、用于构造 JSON 树的 JsonNodeFactory。
readerFor(Class<?> type)ObjectReader这是一个工厂方法,用于构造 ObjectReader,允许对指定类型的实例进行读写操作。
readerFor(JavaType type)ObjectReader这是一个工厂方法,用于构造 ObjectReader,允许对指定 JavaType 的实例进行读写操作。
readerFor(TypeReference<?> type)ObjectReader这是一个工厂方法,用于构造 ObjectReader,允许对给定的 TypeReference 实例进行读写操作。
readerForUpdating(Object valueToUpdate)ObjectReader这是一个工厂方法,用于构造 ObjectReader,允许对给定对象进行更新操作。
readerWithView(Class<?> view)ObjectReader这是一个工厂方法,用于构造 ObjectReader,允许
对具有给定 JSON 视图的对象进行反序列化。
readTree(byte[] content)
  1. readTree(File file)
  2. readTree(InputStream in)
  3. readTree(JsonParser p)
  4. readTree(Reader r)
  5. readTree(String content)
  6. readTree(URL source)
JsonNode

<T extends TreeNode> T
readTree() 方法及其变体用于将 JSON 内容反序列化为由一系列 JsonNode 实例表示的树。
readValue(byte[] src, Class<T> valueType)
类似的方法
  1. readValue(byte[] src, int offset, int len, JavaType valueType)
  2. readValue(byte[] src, int offset, int len, Class<T> valueType)
  3. readValue(byte[] src, JavaType valueType)
  4. readValue(DataInput src, Class<T> valueType)
  5. readValue(File src, Class<T> valueType)
  6. readValue(DataInput src, JavaType valueType)
  7. readValue(File src, JavaType valueType)
  8. readValue(File src, TypeReference valueTypeRef)
  9. readValue(InputStream src, JavaType valueType)
  10. readValue(byte[] src, TypeReference valueTypeRef)
  11. readValue(InputStream src, Class<T> valueType)
  12. readValue(InputStream src, TypeReference valueTypeRef)
  13. readValue(JsonParser p, JavaType valueType)
  14. readValue(JsonParser p, Class<T> valueType)
  15. readValue(JsonParser p, ResolvedType valueType)
  16. readValue(byte[] src, int offset, int len, TypeReference valueTypeRef)
  17. readValue(Reader src, TypeReference valueTypeRef)
  18. readValue(JsonParser p, TypeReference<?> valueTypeRef)
  19. readValue(Reader src, JavaType valueType)
  20. readValue(String content, TypeReference valueTypeRef)
  21. readValue(Reader src, Class<T> valueType)
  22. readValue(String content, Class<T> valueType)
  23. readValue(String content, JavaType valueType)
  24. readValue(URL src, TypeReference valueTypeRef)readValue(URL src, Class<T> valueType)
  25. readValue(URL src, JavaType valueType)
<T> T

<T> MappingIterator<T>
readValue() 方法及其变体用于将 JSON 内容反序列化
  1. 从给定文件到给定的 Java 类型,到非容器类型,或到作为参数传递给它的 Java 类型引用。
  2. 将给定的 JSON 内容转换为 String。
  3. 将给定资源转换为给定的 Java 类型。
变体根据不同的需求使用。
readValues(JsonParser p, Class<T> valueType)
类似的方法
  1. readValues(JsonParser p, JavaType valueType)
  2. readValues(JsonParser p, ResolvedType valueType)
  3. readValues(JsonParser p, TypeReference<?>valueTypeRef)
<T> MappingIterator<T>readValues() 方法及其变体用于从解析器流中读取对象序列。
registerModule(Module module)
类似的方法
  1. registerModules(Iterable<Module> modules)
  2. registerModules(Module... modules)
ObjectMapperregisterModule() 方法及其变体用于注册一个模块,该模块能够扩展映射器提供的功能。
registerSubtypes(NamedType... types)void用于将给定类注册为子类型。通过这样做,基于类型名称的解析可以将父类型链接到子类型。
setAnnotationIntrospector(AnnotationIntrospector ai)ObjectMapper用于设置 AnnotationIntrospector,映射器实例同时用于序列化和反序列化。
setAnnotationIntrospectors(AnnotationIntrospector serializerAI, AnnotationIntrospector deserializerAI)ObjectMapper用于更改当前映射器实例用于序列化和反序列化的 AnnotationIntrospector 实例。
setBase64Variant(Base64Variant v)ObjectMapper用于配置将在 byte[] 序列化器和反序列化器使用的默认 Base64Variant。
setConfig(DeserializationConfig config)ObjectMapper为了覆盖底层 DeserializationConfig 对象,我们使用此方法。
setConfig(SerializationConfig config)ObjectMapper为了覆盖具有序列化特定配置设置的底层 SerializationConfig 对象,我们使用此方法。
setDateFormat(DateFormat dateFormat)ObjectMapper用于配置默认 DateFormat,以便在将时间值序列化为字符串或从 JSON 字符串反序列化时使用。
setDefaultPrettyPrinter(PrettyPrinter pp)ObjectMapper用于指定 PrettyPrinter,以便在启用“默认美化打印”时使用。
setDefaultTyping(TypeResolverBuilder<?> typer)ObjectMapper用于启用类型信息的自动包含。
setHandlerInstantiator(HandlerInstantiator hi)Object用于配置 HandlerInstantiator 以创建处理程序实例。
setFilterProvider(FilterProvider filterProvider)ObjectMapper用于配置当前映射器使用指定的 FilterProvider 将 Filter ID 映射到实际的 Filter 实例。
setInjectableValues(InjectableValues injectableValues)ObjectMapper用于配置 InjectableValues,用于查找要注入的值。
setLocale(Locale l)ObjectMapper用于覆盖格式化时使用的默认区域设置。
setMixInResolver(ClassIntrospector.MixInResolver resolver)ObjectMapper我们使用此方法指定给定的解析器来查找要使用的 mix-in 类,从而覆盖直接添加的映射。
setMixInAnnotations(Map<Class<?>,Class<?>> sourceMixins)void这是一个已弃用的用于定义 mix-in 注解的方法。
setNodeFactory(JsonNodeFactory f)ObjectMapper用于指定要使用的 JsonNodeFactory,用于构造树的根级别节点。
setMixIns(Map<Class<?>,Class<?>> sourceMixins)ObjectMapper用于定义要使用的 mix-in 注解,以增强可处理类已有的注解。
setPropertyInclusion(JsonInclude.Value incl)ObjectMapper用于设置序列化的默认 POJO 属性包含策略。
setPropertyNamingStrategy(PropertyNamingStrategy s)ObjectMapper用于设置要使用的自定义属性命名策略。
setSerializerFactory(SerializerFactory f)ObjectMapper用于设置要使用的特定 SerializerFactory 来构造(bean)序列化器。
setSerializerProvider(DefaultSerializerProvider p)ObjectMapper用于设置“蓝图” SerializerProvider 实例,作为实际提供程序实例的基础,用于处理 JsonSerializer 实例的缓存。
setSubtypeResolver(SubtypeResolver str)ObjectMapper用于设置要使用的自定义子类型解析器。
setTimeZone(TimeZone tz)ObjectMapper用于覆盖格式化时使用的默认时区。
setTypeFactory(TypeFactory f)ObjectMapper用于覆盖当前映射器使用的 TypeFactory 实例。
setVisibility(PropertyAccessor forMethod, JsonAutoDetect.Visibility visibility)
  1. setVisibility(VisibilityChecker<?> vc)
  2. setVisibilityChecker(VisibilityChecker<?> vc)
ObjectMappersetVisibility() 方法及其变体用于设置当前配置的 VisibilityChecker。返回的 ObjectMapper 实例用于检查给定的属性元素是否可以自动检测。
treeAsTokens(TreeNode n)JsonParser用于从 JSON 树表示构造 JsonParser。
treeToValue(TreeNode n, Class<T> valueType)<T> T用于将给定的 JSON 树包含的数据绑定到特定值类型。
version()版本用于获取存储在此类所含 jar 中的版本信息并从中读取。
writer()
  1. writer(Base64Variant defaultBase64)
  2. writer(CharacterEscapes escapes)
  3. writer(ContextAttributes attrs)
  4. writer(DateFormat df)
  5. writer(FilterProvider filterProvider)
  6. writer(FormatSchema schema)
  7. writer(PrettyPrinter pp)
  8. writer(SerializationFeature feature)
  9. writer(SerializationFeature first, SerializationFeature... other)
ObjectWriterwrite() 方法及其变体用于使用默认设置、Base64 编码变体(用于 Base64 编码的二进制数据)、输出的字符转义详细信息、默认属性、DateFormat、Filter Provider、用于写入内容的 JsonGenerator 的 Schema 对象、用于缩进的 pretty printer 或启用的功能来构造 ObjectWriter。
writerFor(Class<?> rootType) -ObjectWriter用于构造 ObjectWriter,以便使用指定的根类型而不是值的实际运行时类型来序列化对象。
writerFor(JavaType rootType)ObjectWriter用于构造 ObjectWriter,以便使用指定的根类型而不是值的实际运行时类型来序列化对象。
writerFor(TypeReference<?> rootType)ObjectWriter用于构造 ObjectWriter,以便使用指定的根类型而不是值的实际运行时类型来序列化对象。
writerWithDefaultPrettyPrinter()ObjectWriter这是一个工厂方法,用于构造 ObjectWriter,以便使用默认的 pretty printer 进行缩进以序列化对象。
writerWithType(Class<?> rootType)
  1. writerWithType(Class<?> rootType)
  2. writerWithType(TypeReference<?> rootType)
ObjectWriter这些方法已弃用,应改用 writerFor(TypeReference) 方法。
writerWithView(Class<?> serializationView)ObjectWriter这是一个工厂方法,用于构造 ObjectWriter,以便使用指定的 JSON 视图来序列化对象。
writeTree(JsonGenerator jgen, JsonNode rootNode)void用于使用给定的 JsonGenerator 序列化提供的 JSON 树。
writeValue(File resultFile, Object value)void用于将 Java 值序列化为 JSON 输出,并将其写入给定的 **文件**。
writeValue(JsonGenerator g, Object value).void用于使用给定的 **JsonGenerator** 将 Java 值序列化为 JSON 输出。
writeValue(OutputStream out, Object value)void用于使用给定的 **OutputStream** 将 Java 值序列化为 JSON 输出。
writeValue(Writer w, Object value)void用于使用给定的 **Writer** 将 Java 值序列化为 JSON 输出。
writeValueAsBytes(Object value)byte[]用于将 Java 值序列化为字节数组。
writeValueAsString(Object value)String用于将 Java 值序列化为 String。

JacksonExample.java

输出

ObjectMapper Class in Jackson