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

所属分类: 软件编程 / java 阅读数: 50
收藏 0 赞 0 分享

方式一是配置参数

参数配置的方式就是在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全局日期格式化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

更多精彩内容其他人还在看

Java输入输出流复制文件所用时间对比

这篇文章主要介绍了Java输入输出流复制文件所用时间对比的相关资料,非常不错,具有参考解决价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程中start和run方法全面解析

这篇文章主要介绍了Java线程中start和run方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的JSON处理器fastjson使用方法详解

下面小编就为大家带来一篇Java的JSON处理器fastjson使用方法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Java 二维码,QR码,J4L-QRCode 的资料整理

本文主要介绍Java 中二维码,QR码,J4L-QRCode,这里整理了详细的资料供大家学习参考关于二维码的知识,有需要的小伙伴可以参考下
收藏 0 赞 0 分享

java哈夫曼树实例代码

这篇文章主要为大家介绍了java哈夫曼树实例代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android读取本地或网络图片并转换为Bitmap

这篇文章主要为大家详细介绍了Android读取本地或网络图片,并转换为Bitmap,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java日期时间操作的方法

这篇文章主要为大家详细介绍了Java日期时间操作的一些方法,获得Calendar,定义日期/时间的格式等,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java 获取路径的各种方法(总结)

下面小编就为大家带来一篇java 获取路径的各种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java数据结构与算法之奇偶排序算法完整示例

这篇文章主要介绍了java数据结构与算法之奇偶排序算法,较为详细的分析了奇偶算法的原理并结合完整示例形式给出了实现技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

java数据结构与算法之双向循环队列的数组实现方法

这篇文章主要介绍了java数据结构与算法之双向循环队列的数组实现方法,结合实例形式分析了双向循环队列的原理与数组实现技巧,并附带说明了该算法的用途,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多