Skip to content

Latest commit

 

History

History
107 lines (77 loc) · 4.49 KB

README.md

File metadata and controls

107 lines (77 loc) · 4.49 KB

Jackson 简述

  • writeValue() 将Java对象输出JSON
  • writeValueAsString() 将Java对象输出JSON字符串
  • readTree() 将JSON字符串解析为JsonNode对象
  • configure() 扩展 ObjectMapper
  • TypeReference

Jackson库的最大优势之一是高度可定制的序列化和反序列化过程

主要注释方法

  • 使用 setDateFormat 设置全局默认日期格式

  • 使用 @JsonFormat 设置日期格式

  • 使用 @JsonSerialize 指定使用的自定义序列化程序

  • 使用 @JsonDeserialize 指定使用自定义反序列化器

  • registerModule(Module module) 注册全局的自定义序列化器、反序列化器

  • 引入依赖 jackson-datatype-jsr310 支持 JAVA 8 日期

  • 序列化时,使用 @JsonAnyGetter 把 Map 中的所有键值作为标准的普通属性获取

  • 使用 @JsonAnySetter 使我们可以灵活地使用 Map 作为标准属性。

  • @JsonUnwrapped定义在序列化/反序列化时应该解包/展平的值

  • 序列化时,@JsonGetter 自定义序列化的 key

  • @JsonSetter 是一种替代 @JsonProperty - 将标记的方法作为setter方法

  • @JsonProperty注释,以表明在JSON属性名

  • @JsonNaming 注解选择序列化属性命名策略

  • 使用 @JsonPropertyOrder 指定序列化属性的排序,(alphabetic = true) 指定序列化时,按字母顺序对属性进行排序

  • 使用 @JsonRawValue 不对属性进行转义或引用,例如 JSON字符串转换为 json

  • 使用 @JsonValue 指定用于序列化整个实例的方法

  • 使用 @JsonRootName 指定此潜在包装实体的名称

  • 使用 @JsonCreator 来调整反序列化中使用的构造函数/工厂

  • 使用 @JsonAlias 定义反序列化时属性一个或多个替代名称

  • @JsonIgnoreProperties 是一个类级别的注释,用于标记 Jackson 将忽略的一个属性或属性列表

  • @JsonIgnore 注释用来在字段级别标记被忽略的属性

  • @JsonIgnoreType 将带注释的类型的所有属性标记为忽略

  • @JsonView 将在其中包含属性以进行序列化/反序列化的视图

  • @JsonFilter注释指定一个过滤器序列化过程中使用

  • 使用 @JsonInclude 排除具有null/空/默认值等属性

  • @JsonAutoDetect 可以覆盖默认语义,即哪些属性可见,哪些属性不可见

  • @JsonAppend 注解,序列化时往 JSON 中添加属性

  • Jackson多态类型处理注释:@JsonTypeInfo – 指示要在序列化中包含哪些类型信息的详细信息。@JsonSubTypes – 指示带注释类型的子类型。@JsonTypeName – 定义用于注释类的逻辑类型名称

  • @JsonManagedReference 和 @JsonBackReference 注释可以处理父/子关系并在循环中工作

  • @JsonIdentityInfo 指示在对值进行序列化/反序列化时应使用对象标识,更多用在相同类多个实例互相引用

  • @JacksonAnnotationsInside 注释自定义 Jackson 注释

  • 使用 Jackson MixIn 语法,在序列化时忽略 addMixIn 添加的类型

  • mapper.disable(MapperFeature.USE_ANNOTATIONS) 禁用所有 Jackson 注解

PS:引入依赖 jackson-datatype-jsr310,使用 @JsonDeserialize、@JsonSerialize、@JsonFormat 定制Java 8 日期格式

忽略属性使用 @JsonIgnoreProperties@JsonIgnore@JsonIgnoreType@JsonFilter

支持 JAVA 8 日期

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.11.1</version>
</dependency>

通过注解 @JsonFormat 设置日期格式原理

子类LocalDateDeserializer 实现基类 JSR310DateTimeDeserializerBasewithDateFormat(DateTimeFormatter dtf) 方法设置 deserialize 方法使用的 DateTimeFormatter 实例

JSR310DateTimeDeserializerBasecreateContextual 方法获取注解的日期格式并调用 withDateFormat 设置 DateTimeFormatter

如何使用Jackson 2.x将Java对象序列化为XML数据并将其反序列化回POJO

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.11.1</version>
</dependency>

支持 Java 8 Optional 支持

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jdk8</artifactId>
    <version>2.11.1</version>
</dependency>

参考

https://www.baeldung.com/jackson-object-mapper-tutorial

https://www.baeldung.com/jackson

自定义视图,以及如何开始与 Spring 集成 https://www.baeldung.com/jackson-json-view-annotation

Jackson 常见异常与解决方案 https://www.baeldung.com/jackson-exception