spring boot配置Jackson详解

Jackson介绍:

Spring Boot支持与三种JSON mapping库集成:Gson、Jackson和JSON-B。Jackson是首选和默认的。

Jackson是spring-boot-starter-json依赖中的一部分,spring-boot-starter-web中包含spring-boot-starter-json。也就是说,当项目中引入spring-boot-starter-web后会自动引入spring-boot-starter-json。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

ObjectMapper

ObjectMapper是jackson-databind包中的一个类,提供读写JSON的功能,可以方便的进行对象和JSON转换:

import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; public final class JsonUtil { private static ObjectMapper mapper = new ObjectMapper(); private JsonUtil() { } /** * Serialize any Java value as a String. */ public static String generate(Object object) throws JsonProcessingException { return mapper.writeValueAsString(object); } /** * Deserialize JSON content from given JSON content String. */ public static <T> T parse(String content, Class<T> valueType) throws IOException { return mapper.readValue(content, valueType); } }

简单测试:

import java.util.Date; public class Hero { private String name; private Date birthday; public static void main(String[] args) throws Exception { System.out.println(JsonUtil.generate(new Hero("Jason", new Date()))); } public Hero() { } public Hero(String name, Date birthday) { this.name = name; this.birthday = birthday; } public String getName() { return name; } public Date getBirthday() { return birthday; } }

输出结果:

{"name":"Jason","birthday":1540909420353}

 application.yml配置介绍:

spring: jackson: # 设置属性命名策略,对应jackson下PropertyNamingStrategy中的常量值,SNAKE_CASE-返回的json驼峰式转下划线,json body下划线传到后端自动转驼峰式 property-naming-strategy: SNAKE_CASE # 全局设置@JsonFormat的格式pattern date-format: yyyy-MM-dd HH:mm:ss # 当地时区 locale: zh # 设置全局时区 time-zone: GMT+8 # 常用,全局设置pojo或被@JsonInclude注解的属性的序列化方式 default-property-inclusion: NON_NULL #不为空的属性才会序列化,具体属性可看JsonInclude.Include # 常规默认,枚举类SerializationFeature中的枚举属性为key,值为boolean设置jackson序列化特性,具体key请看SerializationFeature源码 serialization: WRITE_DATES_AS_TIMESTAMPS: true # 返回的java.util.date转换成timestamp FAIL_ON_EMPTY_BEANS: true # 对象为空时是否报错,默认true # 枚举类DeserializationFeature中的枚举属性为key,值为boolean设置jackson反序列化特性,具体key请看DeserializationFeature源码 deserialization: # 常用,json中含pojo不存在属性时是否失败报错,默认true FAIL_ON_UNKNOWN_PROPERTIES: false # 枚举类MapperFeature中的枚举属性为key,值为boolean设置jackson ObjectMapper特性 # ObjectMapper在jackson中负责json的读写、json与pojo的互转、json tree的互转,具体特性请看MapperFeature,常规默认即可 mapper: # 使用getter取代setter探测属性,如类中含getName()但不包含name属性与setName(),传输的vo json格式模板中依旧含name属性 USE_GETTERS_AS_SETTERS: true #默认false # 枚举类JsonParser.Feature枚举类中的枚举属性为key,值为boolean设置jackson JsonParser特性 # JsonParser在jackson中负责json内容的读取,具体特性请看JsonParser.Feature,一般无需设置默认即可 parser: ALLOW_SINGLE_QUOTES: true # 是否允许出现单引号,默认false # 枚举类JsonGenerator.Feature枚举类中的枚举属性为key,值为boolean设置jackson JsonGenerator特性,一般无需设置默认即可 # JsonGenerator在jackson中负责编写json内容,具体特性请看JsonGenerator.Feature
经验分享 程序员 微信小程序 职场和发展