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日

相关文章

  • 命令行编译和执行java代码

    虽然现在IDE很强大又很智能,但是平常随意写点练手的代码的时候,直接在命令行中使用vim和java命令更为方便快捷,可以做到无鼠标纯键盘的操作。 首先保证将java相关指令添加到了环境变量中; 1.编译class文件: javac -d ./ Test.java 编译好的class文件会放置到环境当前目录 (./)中。-d命令的作用是:如果在java文件中定…

    Java 2023年5月4日
    00
  • Spring Security UserDetails实现原理详解

    Spring Security UserDetails实现原理详解 Spring Security 是一个功能强大的安全框架,它的核心是 Spring Security 核心包。其中,UserDetails 是 Spring Security 中的一个核心接口,它包含了用户信息以及授权信息等内容。本文将详细讲解 Spring Security UserDet…

    Java 2023年5月20日
    00
  • JAVA/JSP学习系列之三(Resin+Apache的安装)

    下面是详细的JAVA/JSP学习系列之三(Resin+Apache的安装)攻略,包含了安装过程和示例代码。 Resin+Apache的安装 安装Resin 下载Resin压缩文件,可以在官网https://resin.caucho.com/下载,也可以在镜像网站上下载。 解压文件,将解压后的文件夹移动到/usr/local目录下。 tar -zxvf res…

    Java 2023年5月19日
    00
  • Java中的异常处理如何提高程序可读性?

    Java中的异常处理可以提高程序的可读性和可维护性,让程序更加健壮。下面是具体的攻略: 为什么需要异常处理 在Java编程中,我们常常会遇到各种错误和异常的情况,例如空指针、数组越界、文件不存在等等。这些错误和异常都需要被处理,否则就会导致程序崩溃。而异常处理就是为了保证程序在遇到异常时能够正确地响应和处理,从而保证程序的健壮性和可靠性。 异常处理的语法 J…

    Java 2023年4月27日
    00
  • MyBatisPlus TypeHandler自定义字段类型转换Handler

    下面是”MyBatisPlus TypeHandler自定义字段类型转换Handler”的完整攻略: 什么是 MyBatisPlus TypeHandler MyBatisPlus TypeHandler是MyBatis用于处理Java的JDBC类型与数据库的JDBC类型相互转换的接口。 MyBatisPlus为我们提供了很多预定义的TypeHandler,…

    Java 2023年5月20日
    00
  • Spring IOC创建对象的两种方式

    创建对象是应用程序开发中最常见的操作之一。在Spring框架中,我们通常使用Spring IOC(控制反转)来管理对象的创建和整个应用程序的生命周期。Spring IOC的主要作用是根据应用程序中的配置,自动创建和维护应用程序中的对象。 Spring IOC创建对象的两种方式: 构造函数注入 Setter方法注入 下面将逐一介绍这两种方式。 1. 构造函数注…

    Java 2023年5月26日
    00
  • 教你用Java实现RSA非对称加密算法

    教你用Java实现RSA非对称加密算法 什么是RSA算法? RSA是一种非对称加密算法,也就是说它需要两个不同的密钥:公钥和私钥。公钥可以用来加密数据,私钥用来解密数据,因为私钥是不公开的,所以数据只能被私钥的拥有者解密。 RSA算法的原理是基于大数分解难题,即将一个大的数分解成为两个质数的乘积的难度,因为在目前计算机的技术水平下,对于一段非常长的质数的乘积…

    Java 2023年5月26日
    00
  • Win+Apache+PHP+MySQL+Tcomcat配置

    以下是关于Win+Apache+PHP+MySQL+Tomcat配置的完整攻略。 简介 该配置通常被称为Wamp或Mamp,是一种常用的Web开发环境配置解决方案。其中,Win代表Windows系统,Apache是一种流行的Web服务器软件,PHP是一种常用的服务器端脚本语言,MySQL则是一种开源的关系型数据库管理系统,Tomcat则是一种轻量级的Java…

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