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赋值给类的属性。
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/18805695
浙公网安备 33010602011771号