springboot全局日期格式化的两种方式

 更新时间:2020年09月02日 09:54:10   作者:Yaphets丶混世大魔王  
这篇文章主要介绍了springboot全局日期格式化的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

方式一是配置参数

参数配置的方式就是在json序列化的时候,当字段为日期类型的时候的format类型,就相当于在所有日期字段上加了一个注解

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss"),但是每个字段都加注解太麻烦,所以直接使用全局配置来实现

参数配置也分为两种配置

第一种是yml的配置

spring:
 jackson:
  #参数意义:
  #JsonInclude.Include.ALWAYS    默认
  #JsonInclude.Include.NON_DEFAULT  属性为默认值不序列化
  #JsonInclude.Include.NON_EMPTY   属性为 空(””) 或者为 NULL 都不序列化
  #JsonInclude.Include.NON_NULL   属性为NULL 不序列化
  default-property-inclusion: ALWAYS
  time-zone: GMT+8
  date-format: yyyy-MM-dd HH:mm:ss

第二中配置方式是properties文件配置

#jackson相关配置
spring.jackson.date-format = yyyy-MM-dd HH:mm:ss
#时区必须要设置
spring.jackson.time-zone= GMT+8
#ALWAYS的意思是即时属性为null,仍然也会输出这个key,对应yml里面的注释里面的类型
spring.jackson.default-property-inclusion=ALWAYS

方式二是自定义转换类

先定义一个string转date的转换类,需要实现convert接口

import org.apache.commons.lang.StringUtils;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 全局handler前日期统一处理
 * @author 
 * @date 2019-06-03
 */
@Component
public class DateConverterConfig implements Converter<String, Date> {

  private static final List<String> formarts = new ArrayList<>(4);

  private static final String YYYY_MM = "yyyy-MM";
  private static final String YYYY_MM_DD = "yyyy-MM-dd";
  private static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
  private static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

  static{
    formarts.add(YYYY_MM);
    formarts.add(YYYY_MM_DD);
    formarts.add(YYYY_MM_DD_HH_MM);
    formarts.add(YYYY_MM_DD_HH_MM_SS);
  }

  @Override
  public Date convert(String source) {
    if (StringUtils.isBlank(source)) {
      return null;
    }
    source = source.trim();
    if(source.matches("^\\d{4}-\\d{1,2}$")){
      return parseDate(source, formarts.get(0));
    }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){
      return parseDate(source, formarts.get(1));
    }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){
      return parseDate(source, formarts.get(2));
    }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){
      return parseDate(source, formarts.get(3));
    }else {
      throw new IllegalArgumentException("Invalid false value '" + source + "'");
    }
  }

  /**
   * 格式化日期
   * @param dateStr String 字符型日期
   * @param format String 格式
   * @return Date 日期
   */
  private Date parseDate(String dateStr, String format) {
    Date date;
    try {
      DateFormat dateFormat = new SimpleDateFormat(format);
      date = dateFormat.parse(dateStr);
    } catch (Exception e) {
      throw new IllegalArgumentException(e.getLocalizedMessage());
    }
    return date;
  }

}

第二步是把这个转换类添加到WebMvcConfigurationSupport

注意,当用户重新实现了WebMvcConfigurationSupport这个类之后,在yml中定义的静态资源路径啥的会失效,需要在这里再次添加一下静态资源路径

import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

  /**
   * 添加自定义的Converters和Formatters.
   */
  @Override
  protected void addFormatters(FormatterRegistry registry) {
    registry.addConverter(new DateConverterConfig());
  }

  /**
   * 如果继承了WebMvcConfigurationSupport,则在yml中配置的相关内容会失效。 需要重新指定静态资源
   *
   * @param registry
   */
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**")
        .addResourceLocations("classpath:/static/")
        .addResourceLocations("classpath:/resources/")
        .addResourceLocations("classpath:/META-INF/resources/");

    super.addResourceHandlers(registry);
  }

}

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

相关文章

  • Spring spel表达式使用方法示例

    Spring spel表达式使用方法示例

    这篇文章主要介绍了Spring spel表达式使用方法示例,通过一些实例向大家展示了spel表达式的用法,需要的朋友可以了解下。
    2017-09-09
  • Java设计模式之外观模式的实现方式

    Java设计模式之外观模式的实现方式

    这篇文章主要介绍了Java设计模式之外观模式的实现方式,外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口,这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性,需要的朋友可以参考下
    2023-11-11
  • mybatis同一张表多次连接查询相同列赋值问题小结

    mybatis同一张表多次连接查询相同列赋值问题小结

    这篇文章主要介绍了mybatis同一张表多次连接查询相同列赋值问题,非常不错,具有参考借鉴价值,需要的的朋友参考下
    2017-01-01
  • Spring中的EurekaServer启动详解

    Spring中的EurekaServer启动详解

    这篇文章主要介绍了Spring中的EurekaServer启动详解,初始化eureka,包含eureka集群的同步和发布注册,这个方法时重写ServletContextListener#contextInitialized,是eureka启动的入口了,需要的朋友可以参考下
    2023-11-11
  • SpringMVC实现前端后台交互传递数据

    SpringMVC实现前端后台交互传递数据

    本篇文章主要介绍了SpringMVC实现前端后台传递数据的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • Java Valhalla Project项目介绍

    Java Valhalla Project项目介绍

    这篇文章主要介绍了Java Valhalla Project项目介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Spring中的拦截器HandlerInterceptor详细解析

    Spring中的拦截器HandlerInterceptor详细解析

    这篇文章主要介绍了Spring中的拦截器HandlerInterceptor详细解析,HandlerInterceptor 是 Spring 框架提供的一个拦截器接口,用于在请求处理过程中拦截和处理请求,需要的朋友可以参考下
    2024-01-01
  • spring  mybatis多数据源实例详解

    spring mybatis多数据源实例详解

    本文主要介绍sping mybatis多数据源处理,在开发过程中经常会遇到多个数据库,这里给大家举例说明如何处理,希望能帮助有需要的小伙伴
    2016-07-07
  • 一文详解Spring Boot可以同时处理多少请求

    一文详解Spring Boot可以同时处理多少请求

    SpringBoot是一个流行的Java开发框架,它被广泛用于构建Web应用程序,但是,开发人员通常会担心它的性能问题,特别是在高负载条件下,Spring Boot能够同时处理多少请求是一个重要的问题,在本文中,我们将讨论SpringBoot的请求处理能力,并介绍如何提高性能
    2023-10-10
  • Spring Data + Thymeleaf 3 + Bootstrap 4 实现分页器实例代码

    Spring Data + Thymeleaf 3 + Bo

    本篇文章主要介绍了Spring Data + Thymeleaf 3 + Bootstrap 4 实现分页器实例代码,非常具有实用价值,需要的朋友可以参考下
    2017-05-05

最新评论