当前位置: 首页 > news >正文

Springboot全局LocalDateTime时间格式化配置

我们对字段的日期格式化时一般会用注解:

 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
 private Date createDate;

但是每个字段都要写也太麻烦了 不是我的全局化作风 在application.yml中配置全局时间格式化只会对Date类型有用:

  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    timezone: GMT+8
    serialization:
      write-dates-as-timestamps: false
  mvc:
    format:
      date: yyyy-MM-dd
      time: HH:mm:ss
      date-time: yyyy-MM-dd HH:mm:ss

以上是无效的 java8的时间模块比如LocalDateTime就没用了 时间依然中间有个T 所以需要额外配置 自定义一个配置类顺便把反序列化也配了:

package com.hmdp.config;

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.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;


@Configuration
public class JacksonConfigure {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer customizer(@Value("${spring.mvc.format.date-time}") String dateTimeFormatPattern,
                                                            @Value("${spring.mvc.format.date}") String dateFormatPattern,
                                                            @Value("${spring.mvc.format.time}") String timeFormatPattern
    ) {
        return jacksonObjectMapperBuilder -> {
            JavaTimeModule javaTimeModule = new JavaTimeModule();

            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateTimeFormatPattern);
            DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(dateFormatPattern);
            DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(timeFormatPattern);

            javaTimeModule.addSerializer(new LocalDateTimeSerializer(dateTimeFormatter));
            javaTimeModule.addSerializer(new LocalDateSerializer(dateFormatter));
            javaTimeModule.addSerializer(new LocalTimeSerializer(timeFormatter));

            javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter));
            javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateFormatter));
            javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter));

            jacksonObjectMapperBuilder.modules(javaTimeModule);
        };
    }
}

加上这些配置后还要检查一下项目有没有jackson-datatype-jsr310-2.13.5.jar这个依赖 这是jackson对java8时间模块的支持包 没有pom.xml就要加上:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.13.5</version> 
</dependency>

大功告成

相关文章:

  • 【Tools】Windows下Git 2.48安装教程详解
  • ## DeepSeek写水果记忆配对手机小游戏
  • Flink之Barrier对齐会影响执行效率,怎么跳过Barrier对齐,跳过后还能保证‌Exactly-Once语义吗?
  • 周末总结(2024/03/08)
  • Java虚拟机之垃圾收集(一)
  • c++ 游戏入门指南
  • libilibi项目优化(1)使用Redis实现缓存
  • 考研机试常见基本题型
  • 学习前置知识第18和19天
  • 计算机网络:计算机网络的组成和功能
  • 腾讯元宝:AI 时代的快速论文阅读助手
  • Linux中的TCP编程接口基本使用
  • 深度学习进阶:神经网络优化技术全解析
  • keil软件下载安装使用(STM32篇)
  • Python 智能机房签到系统:高效管理课堂考勤
  • 计算机毕业设计SpringBoot+Vue.js高校专业实习管理系统(源码+文档+PPT+讲解)
  • 基于深度学习的恶意软件检测系统:设计与实现
  • 【Git】创建,切换分支
  • HTML-网页介绍
  • 剑指 Offer II 061. 和最小的 k 个数对
  • 国办关于加强政府网站建设/重庆百度搜索优化
  • 怎么做属于自己的领券网站/推广优化厂商联系方式
  • 做家居网站/百度知道一下首页
  • 茶楼 网站/怎么营销自己的产品
  • 做哪种类型的网站赚钱呢/seo网络营销外包
  • 烟台网站设计/黑龙江seo关键词优化工具