Jackson是什么?
Jackson是Json的数据处理工具,用于JSON格式数据的解析与生成,是Spring内置解析器,是Spring默认的序列化和反序列化工具,支持自定义实现复杂的、个性化的序列化和反序列化操作。
总之Spring有关序列化的操作都可以来看Jackson。
参考资料
https://github.com/FasterXML/jackson
https://www.yiibai.com/jackson/jackson_objectmapper.html
https://www.cnblogs.com/cnjavahome/p/8393178.html
https://www.cnblogs.com/shenStudy/p/17010236.html
全局配置文件
spring:
jackson:
## 按照此规则进行对象的序列化
## 1.ALWAYS默认 2. NON_NULL属性为NULL不序列化 3.NON_EMPTY属性为""或NULL都不序列化,返回的json没有这个字段
## 4.NON_DEFAULT属性为默认值不序列化
default-property-inclusion: non_null
## 指定日期格式
date-format: yyyy-MM-dd HH:mm:ss
## 指定使用语言 zh_CN简体中文
locale: zh_CN
## 指定日期格式化的时区 中国为东8区
time-zone: GMT+8
## 指定属性名的命名方式:SNAKE_CASE蛇形
property-naming-strategy: SNAKE_CASE
注意的坑
- 配置
property-naming-strategy: SNAKE_CASE之后@JsonIgnoreProperties需要通过下划线来屏蔽属性例如屏蔽属性createTime要写作@JsonIgnoreProperties({create_time})
常用注解
@JsonIgnoreProperties 作用于类,用法1:在序列化与反序列化中忽略xx属性 eg :@JsonIgnoreProperties({“xx”}) 用法2:忽略不认识的字段 eg: @JsonIgnoreProperties(ignoreUnknown = true)
@JsonIgnore 作用于属性,使相应字段不进行序列化与反序列化
@JsonInclude 作用于类,用于设置序列化方式 eg: @JsonInclude(JsonInclude.Include.NON_EMPTY) 表示属性为""或者为NULL时不进行序列化
@JsonFormat 作用于属性,可以把Date类型直接转化为设定好的格式 eg: @JsonFormat(timezone = “GMT+8” pattern = “yyyy-MM-dd HH-mm-ss”)
@JsonProperty 作用于属性,为属性设置别名,在序列化时,把属性名转换为别名 eg: @JsonProperty(“file_id”)
@JsonAlias 作用于属性,为属性设置别名,在反序列化时,让属性接收多个json字段的值 eg: @JsonAlias({“fileId”,“file_id”})
@JsonDeserialize 作用于属性,为该属性指定自定义反序列化类 eg: @JsonDeserialize(using = xx.class) 此类需要继承JsonDeserializer<> 重写反序列化方法 public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException
@JsonSerialize 作用于属性,为该属性指定自定义序列化类 eg: @JsonSerialize(using = xx.class) 此类需要继承JsonDeserializer<> 重写序列化方法 public void serialize(Boolean aBoolean, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException
自定义ObjectMapper进行序列化与反序列化
代码示例待定