SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

一、引言

在开发web应用中,我们经常会涉及到日期类型的数据,在服务器的日期格式与前端的日期格式不同的情况下,我们必须对日期进行格式化处理。本篇文章将介绍如何在SpringBoot2.0项目中整合jackson实现日期格式化和反序列化的功能。

二、依赖

在pom.xml中添加如下依赖:

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

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.4</version>
    </dependency>

    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.5</version>
    </dependency>
</dependencies>

三、配置

在SpringBoot2.0中,我们可以通过配置文件来配置jackson,如果我们的项目使用的是默认配置,那么日期在序列化和反序列化时会格式化成Unix时间戳。所以我们需要配置jackson来进行日期格式化。

在application.properties或者application.yml中添加如下配置:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

这里我们配置的是日期格式化为“年-月-日 时:分:秒”,你也可以选择其他格式,具体的日期格式化方式可以参考java.text.SimpleDateFormat

接下来,我们需要对日期进行反序列化配置,在SpringBoot2.0中,我们可以通过实现WebMvcConfigurer接口来配置jackson。

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    // 配置自定义的jackson类型转换器
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 自定义jackson类型转换器
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
        converter.setObjectMapper(objectMapper);
        converters.add(converter);
    }
}

在configureMessageConverters方法中,我们自定义了一个jackson类型转换器,并配置了日期格式化为“年-月-日 时:分:秒”。

同时,为了避免反序列化时的安全问题,我们还配置了objectMapper的属性DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,这个属性的作用是在JSON中包含未知属性时抛出异常。

四、示例

  1. 序列化

我们在代码中定义一个日期类型的属性,并在代码中将其转换为JSON格式:

@Data
public class User {
    private Long id;
    private String name;
    private Date birthday;

    public User(Long id, String name, Date birthday) {
        this.id = id;
        this.name = name;
        this.birthday = birthday;
    }
}

@RestController
public class UserController {

    @GetMapping("/user")
    public User getUser() {
        return new User(1L, "小明", new Date());
    }
}

此时,我们在浏览器中访问http://localhost:8080/user,返回的JSON格式为:

{"id":1,"name":"小明","birthday":1599483537526}

由于我们在配置文件中配置了日期格式化为“年-月-日 时:分:秒”,所以返回的日期格式为Unix时间戳。但是我们期望的是日期格式化为“年-月-日 时:分:秒”,所以我们需要在配置文件中进行相应配置。

在application.yml中添加日期格式化配置:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

再次访问http://localhost:8080/user,返回的JSON格式为:

{"id":1,"name":"小明","birthday":"2020-09-07 10:25:37"}
  1. 反序列化

我们在代码中定义一个User类,并在代码中使用@RequestBody将JSON格式的数据转换为User对象:

@Data
public class User {
    private Long id;
    private String name;
    private Date birthday;
}

@RestController
public class UserController {

    @PostMapping("/user")
    public User addUser(@RequestBody User user) {
        return user;
    }
}

此时,我们使用Postman发送如下JSON格式的数据:

{
  "id": 1,
  "name": "小明",
  "birthday": "2020-09-07 10:25:37"
}

这里我们的日期格式是“年-月-日 时:分:秒”,如果没有进行日期格式化配置,此时会抛出异常。但我们已经在WebMvcConfigurer中自定义了jackson类型转换器,并配置了日期格式化为“年-月-日 时:分:秒”,所以我们能够成功将JSON格式的数据转换为User对象。

至此,SpringBoot2.0整合jackson配置日期格式化和反序列化的实现就完成了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot2.0整合jackson配置日期格式化和反序列化的实现 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页)

    Spring Data JPA 复杂查询方式总结 Spring Data JPA 是 Spring 借鉴了 Hibernate 实现的一套 JPA 规范实现。Spring Data JPA 使得我们在使用 JPA 进行数据库操作时能够更加简单方便。 下面我们来讲解 Spring Data JPA 如何进行复杂查询,包括多表关联查询和自定义分页查询。 多表关联…

    Java 2023年5月20日
    00
  • Spring cloud alibaba之Ribbon负载均衡实现方案

    Spring Cloud Alibaba之Ribbon负载均衡实现方案 什么是负载均衡 在计算机网络中,负载均衡是指将任务或服务请求分摊给多个处理单元,例如计算机、网络、磁盘、存储设备,以达到最大的吞吐量,最小化响应时间,最大化可靠性,以及避免单点故障的目的。 为什么使用负载均衡 当一个系统需要处理大量的请求时,单个服务实例难以承受这样的压力。通过使用负载均…

    Java 2023年5月19日
    00
  • 详解ArrayList的扩容机制

    下面是讲解ArrayList的扩容机制的完整攻略: 标准版答案 概述 ArrayList 是基于数组实现的,其内部有一个数组用于存放数据。它的扩容机制就是在插入数据时,判断数组已满,此时将数组扩容为原数组长度的1.5倍。 具体实现 ArrayList 的核心代码如下: private Object[] elementData; private int siz…

    Java 2023年5月26日
    00
  • java DateUtil工具类时间戳类型转换详解

    Java DateUtil工具类时间戳类型转换详解 1. 什么是时间戳? 时间戳(Timestamp)是指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。感性地理解,时间戳是用来表示一个时间点的数字,可以用于在不同的时间、时区、地点下定位和比较时间。 2. 如何在Java中使用时间戳? Java中可以使用Date、Calendar类来表…

    Java 2023年5月20日
    00
  • 什么是GC日志?

    GC日志是指GC(Garbage Collection,垃圾回收)的记录日志,主要用于排查JVM内存问题和性能调优。在GC发生时,JVM会记录下当前内存使用情况、GC时间、GC原因、GC类型、GC前后各个内存区域的使用情况等信息,并输出到GC日志中。 常见的GC日志有以下几种格式: -Xloggc:filename [可简写为 -verbose:gc,从JD…

    Java 2023年5月11日
    00
  • Spring操作JdbcTemplate数据库的方法学习

    Spring操作JdbcTemplate数据库的方法学习 什么是JdbcTemplate? JdbcTemplate是Spring框架中的一个类,它对JDBC(Java Database Connectivity) API进行了封装,使得我们在操作数据库时可以更加简单和高效。它这么做的目的是为了提高开发效率和灵活性。 JdbcTemplate提供了许多简便的…

    Java 2023年5月20日
    00
  • Spring Boot整合mybatis(一)实例代码

    在Spring Boot应用程序中使用MyBatis进行数据库操作是非常常见的。在本文中,我们将介绍如何在Spring Boot应用程序中整合MyBatis,并提供两个示例。 示例一:使用XML配置文件 以下是一个示例,演示如何在Spring Boot应用程序中使用XML配置文件整合MyBatis: 添加依赖 在pom.xml文件中添加以下依赖: <d…

    Java 2023年5月15日
    00
  • JDK的命令详解

    JDK是Java Development Kit的缩写,是Java应用程序开发所必须的软件开发工具包。它包含了Java Runtime Environment(JRE)和一些开发工具,例如编译器、调试器、JavaDoc工具等等。本篇文章将带您深入了解JDK所提供的命令。 安装JDK 在使用JDK的命令前,需要先安装JDK。以下是在Windows系统下安装JD…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部