Jackson
2021-01-28 13:55:01 13 举报
AI智能生成
JSON序列化框架Jackson
作者其他创作
大纲/内容
jackson-core
核心模块,定义了流API,和JSON特性实现
jackson-annotations
定义json转换的注解
属性命名
@JsonProperty
外部属性名称,名称中使用的数据格式
属性包含
@JsonAutoDetect
类注释用于重写属性内省的定义
@JsonIgnore
用于忽略指定的属性
@JsonIgnoreProperties
类注解,指定被忽略的属性,或者指定忽略不匹配的属性
@JsonIgnoreType
类注解,指定忽略属性的类
@JsonInclude
用于定义序列化时是否不应包含某些“非值”(空值或空值)
属性文档和元数据
@JsonPropertyDescription
用于使用json schema生成器时定义属性的可读性更高的描述信息
序列化和反序列化
通用
@JsonFormat
定义字段的格式,如时间格式等
@JsonUnwrapped
定义属性序列化是是否进行包装,默认为true,则嵌入的对象属性将会在序列化时放到主对象中,而不是JSON嵌入对象
@JsonView
定义属性在序列化和反序列化时的视图
序列化
@JsonAnyGetter
定义某getter方法为任何getter方法,它返回一个Map,其key-value数据将会被序列化为json附加属性,或者对象已有的常规属性
@JsonGetter
同@JsonProperty,标记方法为Getter
@JsonPropertyOrder
用于指定JSON序列化顺序
@JsonRawValue
定义属性被原样序列化,不会被转义,例如直接将html或JavaScript代码原样序列化,而不是处理为字符串
@JsonValue
用在Getter上,定义使用单个的Getter返回值来作为对象的序列化输出,忽略其他的属性,只能用在对象的一个方法上,多个则抛出异常
@JsonRootName
类注解,当启用WRAP_ROOT_VALUE时,定义ROOT的名称,默认是类名称
反序列化
@JacksonInject
定义属性应通过“注入”获取其值,而不是从数据(JSON)获取
@JsonAnySetter
用于将双参数方法定义为“任何setter”的注释,用于反序列化其他未映射的JSON属性的值
@JsonCreator
用于定义构造函数或静态工程方法在反序列化时用来创建实例
@JsonSetter
同@JsonProperty,用于标记指定的方法是setter
@JsonEnumDefaultValue
用来定义反序列化时不匹配的枚举类型属性的默认值,需要开启READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE特性
类型处理
@JsonSubTypes
定义反序列化时类的子类型(多态)
@JsonTypeId
@JsonTypeInfo
@JsonTypeName
对象引用和标识
@JsonManagedReference, @JsonBackReference
@JsonIdentityInfo
元注解
@JacksonAnnotation
@JacksonAnnotationsInside
jackson-databind
对象和json转换支持,依赖core和annotation
注解
序列化
@JsonSerialize
反序列化
@JsonDeserialize
@JsonNaming
@JsonPOJOBuilder
@JsonValueInstantiator
多态类型处理
@JsonTypeResolver
@JsonTypeIdResolver
Feature
DeserializationFeature
类型转换
USE_BIG_DECIMAL_FOR_FLOATS
false
USE_BIG_INTEGER_FOR_INTS
false
USE_JAVA_ARRAY_FOR_JSON_ARRAY
false
READ_ENUMS_USING_TO_STRING
false
结构转换
ACCEPT_SINGLE_VALUE_AS_ARRAY
false
UNWRAP_ROOT_VALUE
false
UNWRAP_SINGLE_VALUE_ARRAYS
false
值转换
ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT
false
ACCEPT_EMPTY_STRING_AS_NULL_OBJECT
false
ACCEPT_FLOAT_AS_INT
true
ADJUST_DATES_TO_CONTEXT_TIME_ZONE
true
READ_DATE_TIMESTAMPS_AS_NANOSECONDS
false
READ_UNKNOWN_ENUM_VALUES_AS_NULL
false
READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE
false
失败处理
FAIL_ON_IGNORED_PROPERTIES
false
FAIL_ON_UNKNOWN_PROPERTIES
true
FAIL_ON_INVALID_SUBTYPE
true
FAIL_ON_NULL_FOR_PRIMITIVES
false
FAIL_ON_NUMBERS_FOR_ENUMS
false
FAIL_ON_READING_DUP_TREE_KEY
false
FAIL_ON_UNRESOLVED_OBJECT_IDS
true
FAIL_ON_MISSING_CREATOR_PROPERTIES
false
WRAP_EXCEPTIONS
true
其他
EAGER_DESERIALIZER_FETCH
true
SerializationFeature
通用输出
WRAP_ROOT_VALUE
false
INDENT_OUTPUT
false
错误处理
FAIL_ON_EMPTY_BEANS
true
WRAP_EXCEPTIONS
true
输出生命周期
CLOSE_CLOSEABLE
false
FLUSH_AFTER_WRITE_VALUE
特定类型序列化
WRITE_DATES_AS_TIMESTAMPS
true
WRITE_DATE_KEYS_AS_TIMESTAMPS
false
WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS
false
WRITE_ENUMS_USING_TO_STRING
false
WRITE_ENUMS_USING_INDEX
false
WRITE_NULL_MAP_VALUES
true
WRITE_EMPTY_JSON_ARRAYS
true
WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED
false
WRITE_BIGDECIMAL_AS_PLAIN
false
WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS
false
ORDER_MAP_ENTRIES_BY_KEYS
false
其他
EAGER_SERIALIZER_FETCH
true
USE_EQUALITY_FOR_OBJECT_ID
false
MapperFeature
每一个ObjectMapper对应一个配置集,必须使用前定义,如果配置不同,那么需要新建不同的ObjectMapper实例
注解处理
USE_ANNOTATIONS
true
是否启用注解处理,在于注解处理消耗高的平台上,如Android
内省和属性检测
AUTO_DETECT_CREATORS
true
自动检测对象创建方法(构造器、静态工程方法),而不需要明确标注@JsonCreator注解,能被检测的条件:
1、必须是public
2、只能有一个参数,类型为String、int、long、boolean
3、工厂方法名称必须为valueOf
AUTO_DETECT_FIELDS
true
AUTO_DETECT_GETTERS
true
AUTO_DETECT_IS_GETTERS
true
AUTO_DETECT_SETTERS
true
REQUIRE_SETTERS_FOR_GETTERS
false
USE_GETTERS_AS_SETTERS
true
INFER_PROPERTY_MUTATORS
true
ALLOW_FINAL_FIELDS_AS_MUTATORS
true
反射和访问
CAN_OVERRIDE_ACCESS_MODIFIERS
true
OVERRIDE_PUBLIC_ACCESS_MODIFIERS
true
命名处理
SORT_PROPERTIES_ALPHABETICALLY
false
定义默认属性序列化顺序,为true则按照字母顺序,否则按照字段申明的顺序
1、只能用于POJO的属性
2、定义的是默认的行为,可以被覆盖,如@JsonPropertyOrder
USE_WRAPPER_NAME_AS_PROPERTY_NAME
false
ACCEPT_CASE_INSENSITIVE_PROPERTIES
false
允许更宽泛的反序列化,启用,json和bean属性匹配时不区分大小写
USE_STD_BEAN_NAMING
false
其他
USE_STATIC_TYPING
false
DEFAULT_VIEW_INCLUSION
true
IGNORE_DUPLICATE_MODULE_REGISTRATIONS
true
0 条评论
下一页