SpringBoot中Jackson日期格式化技巧分享

 更新时间:2022年04月13日 15:28:01   作者:D瓜哥  
一般在SpringBoot项目中,spring默认使用jackson转换日期,下面这篇文章主要给大家介绍了关于SpringBoot中Jackson日期格式化技巧的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

Jackson 日期格式化技巧

使用 Spring Boot 时,需要使用 Jackson 处理一些 Java Time API 类型的 JSON 序列化问题,在处理一些类的字段时,可以通过直接在属性上加注解的方式来指定其格式化样式。但是,昨天同事遇到一个格式化 Map 数据的问题,这样就不能通过加注解来解决格式化样式的问题了。

在网上各种搜索,各种尝试后,终于解决了这个问题,记录一下,以备不时之需。

闲言少叙,直接上代码:

package com.diguage.demo.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import static com.fasterxml.jackson.databind.SerializationFeature.*;
import static java.time.format.DateTimeFormatter.ofPattern;
/<strong>
 * 配置类
 *
 * @author D瓜哥 · <a href="https://www.diguage.com/" rel="external nofollow"  rel="external nofollow"  target="_blank" >https://www.diguage.com</a>
 */
@Configuration
public class Config {
    /</strong>
     * 创建 ObjectMapper 对象,配置日期格式化
     *
     * @author D瓜哥 · <a href="https://www.diguage.com/" rel="external nofollow"  rel="external nofollow"  target="_blank" >https://www.diguage.com</a>
     */
    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        String dateTimepattern = "yyyy-MM-dd HH:mm:ss";
        String datePattern = "yyyy-MM-dd";
        DateFormat dateFormat = new SimpleDateFormat(dateTimepattern);
        mapper.setDateFormat(dateFormat);
        mapper.configure(WRITE_DATES_AS_TIMESTAMPS, false);
        mapper.setDateFormat(new StdDateFormat().withColonInTimeZone(true));
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addDeserializer(LocalDate.class,
                new LocalDateDeserializer(ofPattern(datePattern)));
        javaTimeModule.addSerializer(LocalDate.class,
                new LocalDateSerializer(ofPattern(datePattern)));
        javaTimeModule.addDeserializer(LocalDateTime.class,
                new LocalDateTimeDeserializer(ofPattern(dateTimepattern)));
        javaTimeModule.addSerializer(LocalDateTime.class,
                new LocalDateTimeSerializer(ofPattern(dateTimepattern)));
        mapper.registerModule(javaTimeModule);
        return mapper;
    }
}

后续问题

不知道通过这种方式指定日期格式化样式后,在处理一些打格式化样式注解的字段时,会有什么样的表现?有机会测试一下。

补充:Jackson 统一配置 日期转换格式

方式一:配置文件yml中配置

spring:
    jackson:
        default-property-inclusion: ALWAYS
        time-zone: GMT+8
        date-format: yyyy-MM-dd HH:mm:ss

这样序列化后,Date类型会被格式化成配置中的格式。

方式二:配置类中配置创建JacksonConfig.java

@Configuration
public class JacksonConfig {

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public Jackson2ObjectMapperBuilderCustomizer customJackson() {
        return new Jackson2ObjectMapperBuilderCustomizer() {
            @Override
            public void customize(Jackson2ObjectMapperBuilder builder) {
                builder.serializerByType(LocalDateTime.class,
                        new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                builder.serializerByType(LocalDate.class,
                        new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                builder.serializerByType(LocalTime.class,
                        new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
                builder.deserializerByType(LocalDateTime.class,
                        new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                builder.deserializerByType(LocalDate.class,
                        new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                builder.deserializerByType(LocalTime.class,
                        new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
                builder.serializationInclusion(JsonInclude.Include.NON_NULL);
                builder.failOnUnknownProperties(false);
                builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            }
        };
    }
}

参考资料

到此这篇关于SpringBoot中Jackson日期格式化技巧的文章就介绍到这了,更多相关SpringBoot Jackson日期格式化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot将多个文件夹进行压缩的两种方法(浏览器下载和另存为)

    SpringBoot将多个文件夹进行压缩的两种方法(浏览器下载和另存为)

    Spring Boot项目通常不会自动对文件夹进行压缩,不过,在打包应用时,如果你使用了Maven或Gradle这样的构建工具,并且配置了相应的插件,可以在打成jar或war包的时候将依赖的库文件合并并压缩,本文介绍了SpringBoot将多个文件夹进行压缩的两种方法
    2024-07-07
  • Spring中11个最常用的扩展点总结,你知道几个

    Spring中11个最常用的扩展点总结,你知道几个

    我们知道IOC(控制反转)和AOP(面向切面编程)是spring的基石,除此之外spring的扩展能力非常强,下面这篇文章主要给大家介绍了关于Spring中11个最常用的扩展点的相关资料,需要的朋友可以参考下
    2022-12-12
  • Maven中plugins与pluginManagement的区别说明

    Maven中plugins与pluginManagement的区别说明

    这篇文章主要介绍了Maven中plugins与pluginManagement的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 关于springboot打包目录全解析

    关于springboot打包目录全解析

    这篇文章主要介绍了springboot打包目录解析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 启用Spring事务管理@EnableTransactionManagement示例解析

    启用Spring事务管理@EnableTransactionManagement示例解析

    这篇文章主要为大家介绍了启用Spring事务管理@EnableTransactionManagement示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • SpringCloud中的Ribbon负载均衡详细解读

    SpringCloud中的Ribbon负载均衡详细解读

    这篇文章主要介绍了SpringCloud中的Ribbon负载均衡详细解读,当系统面临大量的用户访问,负载过高的时候,通常会增加服务器数量来进行横向扩展(集群),多个服务器的负载需要均衡,以免出现服务器负载不均衡,部分服务器负载较大,部分服务器负载较小的情况,需要的朋友可以参考下
    2023-11-11
  • IDEA之web项目导入jar包方式

    IDEA之web项目导入jar包方式

    这篇文章主要介绍了IDEA之web项目导入jar包方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • SpringBoot快速构建应用程序方法介绍

    SpringBoot快速构建应用程序方法介绍

    这篇文章主要介绍了SpringBoot快速构建应用程序方法介绍,涉及SpringBoot默认的错误页面,嵌入式Web容器层面的约定和定制等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • java IO流 之 输入流 InputString()的使用

    java IO流 之 输入流 InputString()的使用

    这篇文章主要介绍了java IO流 之 输入流 InputString()的使用,以及读取数据的三种方式详解,非常不错,需要的朋友可以参考下
    2016-12-12
  • 详解Java如何实现小顶堆和大顶堆

    详解Java如何实现小顶堆和大顶堆

    今天给大家带来的是关于Java的相关知识,文章围绕着Java如何实现小顶堆和大顶堆展开,文中有非常详细的解释及代码示例,需要的朋友可以参考下
    2021-06-06

最新评论