Springboot可选的JSON序列化工具
FastJson高效使用系列文章目录
第一章 FastJson使用详解
第二章 FastJsonHttpMessageConverter 类的作用与使用详解
第三章 Jackson 使用详解
文章目录
前言
Spring Boot 默认使用 Jackson 作为 JSON 解析器,因此在 Spring Boot 中使用 Jackson 非常简单。下面是集成 Jackson 的步骤:
一、Jackson是什么?
Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson 社区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 。 Spring MVC 的默认 json 解析器便是 Jackson。 Jackson 优点很多。 Jackson 所依赖的 jar 包较少 ,简单易用。与其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比较快;Jackson 运行时占用内存比较低,性能比较好;Jackson 有灵活的 API,可以很容易进行扩展和定制。
二、使用步骤
1. 导入 Jackson 的依赖
在使用 Jackson 之前,我们需要在项目中导入 Jackson 的依赖。如果使用 Maven 构建项目,可以在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
2. 自定义 Jackson 的配置
在 Spring Boot 中,我们可以通过自定义 Jackson2ObjectMapperBuilder 类型的 @Bean,来自定义 Jackson 的配置。例如,以下代码示例中,我们将日期类型序列化为 ISO-8601 格式的字符串:
@Configuration
public class JacksonConfig {
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
return new Jackson2ObjectMapperBuilder()
.simpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
.serializers(new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE))
.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME))
.serializers(new DurationSerializer());
}
}
3. 应用 Jackson 的配置
在自定义 Jackson 配置后,我们需要将其应用到 Spring Boot 中。这可以通过在 application.properties 或 application.yml 文件中添加以下配置来完成:
spring.jackson.date-format: yyyy-MM-dd'T'HH:mm:ss.SSSZ
spring.jackson.serialization.write-dates-as-timestamps: false
4. 使用 Jackson 序列化和反序列化
在完成上述步骤后,我们就可以在 Spring Boot 中使用 Jackson 了。以下是一个简单的示例:
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
List<User> users = new ArrayList<>();
users.add(new User("Alice", 20));
users.add(new User("Bob", 30));
return users;
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return user;
}
}
public class User {
private String name;
private int age;
// 省略 getter 和 setter
}
在上述示例中,@GetMapping 和 @PostMapping 注解使用了 Spring Boot 的默认序列化器和反序列化器,即 Jackson。在控制器方法中,我们返回了一个包含两个 User 对象的列表,并接受一个 User 对象作为请求体。
5. Jackson2ObjectMapperBuilder配置详解
Jackson2ObjectMapperBuilder 是用于构建 ObjectMapper 的构建器,其中包含了很多定制化的配置。以下是一些常用的配置项:
配置 | |
---|---|
dateFormat:用于设置日期格式。 | |
modules:用于设置序列化或反序列化的模块。 | |
timeZone:用于设置时区。 | |
serializationInclusion:用于设置序列化时包含哪些属性。 | |
serializationFailOnEmptyBeans:当序列化一个空对象时,是否抛出异常。 | |
serializationFailOnUnwrappedTypeIdentifiers:当序列化一个包含了 @JsonUnwrapped 注解的类时,是否抛出异常。 | |
featuresToDisable:用于禁用一些序列化或反序列化的特性。 | |
featuresToEnable:用于启用一些序列化或反序列化的特性。 |
以下是一个示例:
@Configuration
public class JacksonConfig {
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
return new Jackson2ObjectMapperBuilder()
// 配置日期格式
.dateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))
// 配置时区
.timeZone(TimeZone.getTimeZone("Asia/Shanghai"))
// 配置序列化时包含哪些属性
.serializationInclusion(JsonInclude.Include.NON_NULL)
// 配置禁用一些特性
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
// 配置启用一些特性
.featuresToEnable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
}
}
在上述示例中,我们通过 dateFormat 配置了日期格式为 “yyyy-MM-dd HH:mm:ss”,通过 timeZone 配置了时区为 “Asia/Shanghai”,通过 serializationInclusion 配置了序列化时包含非空属性,通过 featuresToDisable 禁用了序列化时将日期序列化为时间戳,通过 featuresToEnable 启用了反序列化时将空字符串转换为 null 对象。
总结
以上就是就是Jackson使用的详细介绍,从个人角度来讲,Jackson更切合springboot项目进行使用。