Jackson序列化与反序列化注解用法说明

1.情景展示

我们知道,springboot框架进行前后端交互的时候,使用的Jackson进行的序列化和反序列化。

下面Jackson进行详细说明。

2.序列化

手动进行序列化

ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(实体类对象);

如果需要对LocalDate,LocalDateTime,LocalTime进行序列化,如果序列化格式失败或者报错,解决办法见文末推荐。

@JsonFormat

既可以用于序列化,也可以于反序列化。

该注解通常用于实现日期类型的序列化与反序列化。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

既可以修饰java.time.LocalDateTime,也可以用来修饰java.util.Date。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

一般情况下,只用来修饰java.time.LocalDateTime,如果用来修饰java.util.Date,可能会出现时区相差8小时的问题。

 另外,当我们使用LocalDateTime来反序列化日期字符串,是不行的。

反序列化日期,我们可以使用LocalDate或Date来接收,不能使用LocalDateTime。

另外,如果json的日期字符串格式必须和该注解声明的日期格式保持一致

如:json字符串是2025-07-04,@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")用于接收,这个时候进行反序列化就会报错。

@JsonProperty

既可以用于序列化,也可以于反序列化。

用来定义序列化和反序列化时,对应的名称。

如上图所示,类的属性时orgid,进行序列化时,使用的是orgId。

进行反序列时,json键orgId的值,会被映射到该属性上。

@JsonSerialize

既可作用于单个属性,也可以作用于整个实体类。

🙋‍♀️🌰

@JsonSerialize(using = ToStringSerializer.class)
private Long orgid;

 这样,序列化时,orgid的值将被自动转成String类型。

反序列化时,如果对方提供的orgid的值是String类型,会被自动转成实际所需的数据类型。(这与该注解无关)

另外,Jackson提供了多种序列化方式,具体包在:com.fasterxml.jackson.databind.ser.std。

@JsonView

 

@JsonInclude

该注解既可作用于单个属性,也可以作用于整个实体类。

JsonInclude.Include共有7个属性:

ALWAYS:始终包含字段(默认行为)。

@JsonInclude(JsonInclude.Include.ALWAYS)

当使用Jackson进行序列化时,默认会把所有的类属性都进行序列化,不管是否有值。
NON_DEFAULT:仅当字段值不是默认值时才包含。

@JsonInclude(JsonInclude.Include.NON_DEFAULT)

NON_EMPTY:仅当字段值不为空(包括 null 和空集合/字符串)时才包含。

@JsonInclude(JsonInclude.Include.NON_EMPTY)

NON_NULL:仅当字段值不为null时才包含。

@JsonInclude(JsonInclude.Include.NON_NULL)

@JsonIgnore

既可以用于序列化,也可以于反序列化。

不管是将实体类转Json,还是将Json转实体类,被该注解修饰的类的属性将不会被转成Json的key,也不会将json对应的key赋值给类的属性。

3.反序列化

手动进行反序列化

ObjectMapper objectMapper = new ObjectMapper();
QycfInfoBo2 qycfInfoBo21 = objectMapper.readValue(Json字符串, QycfInfoBo2.class);

同样地, 对LocalDate,LocalDateTime,LocalTime进行反序列化时,如果反序列失败,解决办法见文末推荐。

@JsonFormat

@JsonProperty

@JsonInclude

@JsonIgnore

既可以用于序列化,也可以于反序列化。

不管是将实体类转Json,还是将Json转实体类,被该注解修饰的类的属性将不会被转成Json的key,也不会将json对应的key赋值给类的属性。

posted @ 2025-04-02 16:55  Marydon  阅读(251)  评论(0)    收藏  举报