springboot集成jackson详解

文章介绍了SpringBoot中两种常用的JSON序列化工具——FastJson和Jackson。首先详细讲解了FastJson的使用,包括其高效特性和使用步骤。然后转向Jackson,阐述了Jackson的基本概念,如它的流行度、性能优势以及如何在SpringBoot中配置和使用,包括导入依赖、自定义配置、应用配置、序列化与反序列化操作。文章还提到了Jackson2ObjectMapperBuilder的配置选项,帮助读者深入理解Jackson的定制化设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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项目进行使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值