springboot整合Jackson
springboot整合Jackson
Jackson简介
Jackson是一套适合java的数据处理工具,用于JSON
格式数据的解析与生成,支持多种类型,是SpringMVC内置解析器。
除了Jackson,常用的JSON解析框架还有GSON(由Google提供的开源库)、FastJSON(由Alibaba提供的开源库)。
引入依赖
直接引入
spring-boot-starter-web
依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Jackson的核心模块
- jackson-core:定义底层流的API,包含特殊JSON格式的实现
- jackson-annotations:包含jackson标准的注解
- jackson-databind:支持在jackson-core包的基础上实现数据绑定与对象序列化,它依赖于jackson-core包与jackson-annotions包
Jackson的全局配置
Jackson可以直接在配置文件中进行参数配置
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
Jackson的常用注解
注解 | 含义 |
---|---|
@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 |
Jackson使用ObjectMapper进行序列化与反序列化
ObjectMapper:jackson最常用的API,可以将JSON映射到java对象(反序列化),java对象映射到JSON(序列化)
创建ObjectMapper
正常创建:
ObjectMapper mapper = new ObjectMapper();
在springboot中自动配置会将ObjectMapper注入到spring环境中,因此采用注解引入即可
@Resource
private ObjectMapper mapper;
序列化与反序列化
//新建ObjectMapper
ObjectMapper mapper = new ObjectMapper();
User user1 = new User();
//序列化
String json = mapper.writeValueAsString(user1);
//反序列化
User user2 = mapper.readValue(json,User.class);
//建议用这种方法进行反序列化
User user3 = mapper.readValue(json, new TypeReference<User>() {
});
参考网址
Jackson官网:https://github.com/FasterXML/jackson