SpringBoot中时间类型 序列化、反序列化、格式处理示例代码

 更新时间:2020年08月27日 08:37:16   作者:赵小胖0914  
这篇文章主要介绍了SpringBoot中时间类型 序列化、反序列化、格式处理示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

【SpringBoot】 中时间类型 序列化、反序列化、格式处理

Date

yml全局配置

spring: 
 jackson:
 time-zone: GMT+8
 date-format: yyyy-MM-dd HH:mm:ss #配置POST请求Body中Date时间类型序列化格式处理,并返回

请求参数类型转换

/**
 * 时间Date转换
 * 配置GET请求,Query查询Date时间类型参数转换
 */
@Component
public class DateConverter implements Converter<String, Date> {
 @Override
 public Date convert(String source) {
 if (StringUtils.isBlank(source)) {
  return null;
 }
 if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
  return parseDate(source.trim(), "yyyy-MM-dd");
 }
 if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
  return parseDate(source.trim(), "yyyy-MM-dd HH:mm:ss");
 }
 throw new IllegalArgumentException("Invalid value '" + source + "'");
 }

 public Date parseDate(String dateStr, String format) {
 Date date = null;
 try {
  date = new SimpleDateFormat(format).parse(dateStr);
 } catch (ParseException e) {
  log.warn("转换{}为日期(pattern={})错误!", dateStr, format);
 }
 return date;
 }
}

JDK8-时间类型-LocalDateTime、LocalDate、LocalTime

/**
 * 序列化,反序列化,格式处理
 *
 * @author zc
 * @date 2020/7/9 01:42
 */
@Slf4j
@Configuration
public class JacksonCustomizerConfig {

 @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
 private String localDateTimePattern;

 @Value("${spring.jackson.local-date-format:yyyy-MM-dd}")
 private String localDatePattern;

 @Value("${spring.jackson.local-time-format:HH:mm:ss}")
 private String localTimePattern;

 @Bean
 public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
  return builder -> {
   builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(localDateTimePattern)));
   builder.serializerByType(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(localDatePattern)));
   builder.serializerByType(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(localTimePattern)));
   builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(localDateTimePattern)));
   builder.deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(localDatePattern)));
   builder.deserializerByType(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(localTimePattern)));
  };
 }
 
 	/**
  * 时间LocalDateTime转换
  */
 @Component
 public static class LocalDateTimeConverter implements Converter<String, LocalDateTime> {
  @Override
  public LocalDateTime convert(String source) {
   if (StringUtils.isBlank(source)) {
    return null;
   }
   if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
    return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
   }
   throw new IllegalArgumentException("Invalid value '" + source + "'");
  }
 }

 /**
  * 时间LocalDate转换
  */
 @Component
 public static class LocalDateConverter implements Converter<String, LocalDate> {
  @Override
  public LocalDate convert(String source) {
   if (StringUtils.isBlank(source)) {
    return null;
   }
   if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
    return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
   }
   throw new IllegalArgumentException("Invalid value '" + source + "'");
  }
 }
 
}

赵小胖个人博客:https://zc.happyloves.cn:4443/wordpress/

PS:springboot 时间类型配置

springboot 自带了jackson来处理时间,但不支持jdk8 LocalDate、LocalDateTime的转换。

对于Calendar、Date二种日期,转换方式有二种:

一、统一application.properties属性配置文件中加入

spring.jackson.dateFormat=yyyy-MM-dd HH:mm:ss

如果你使用了joda第三包下的时间类型,

spring.jackson.jodaDateTimeFormat=yyyy-MM-dd HH:mm:ss

此方法为全局格式,没办法处理差异化。

二、使用jackson的时间注解@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

需要在每个日期类型上都添加,增加代码量,但更灵活性。

总结

到此这篇关于SpringBoot中时间类型 序列化、反序列化、格式处理示例代码的文章就介绍到这了,更多相关SpringBoot中时间类型 序列化、反序列化、格式处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java使用锁解决银行取钱问题实例分析

    Java使用锁解决银行取钱问题实例分析

    这篇文章主要介绍了Java使用锁解决银行取钱问题,结合实例形式分析了java线程同步与锁机制相关原理及操作注意事项,需要的朋友可以参考下
    2019-08-08
  • Java源码解析之object类

    Java源码解析之object类

    前些天看到别人讨论阅读源码有什么用这个问题,有一句话说的特别好:学习别人实现某个功能的设计思路,来提高自己的编程水平。本文主要介绍了Java源码解析之object类,需要的朋友可以参考。
    2017-10-10
  • VScode+Java配置与使用的详细步骤

    VScode+Java配置与使用的详细步骤

    这篇文章主要介绍了VS code+Java配置与使用的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Java使用iTextPDF生成PDF文件的实现方法

    Java使用iTextPDF生成PDF文件的实现方法

    这篇文章主要介绍了Java使用iTextPDF生成PDF文件的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 基于Mybatis-Plus的CRUD的实现

    基于Mybatis-Plus的CRUD的实现

    这篇文章主要介绍了基于Mybatis-Plus的CRUD的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 利用MultipartFile实现文件上传功能

    利用MultipartFile实现文件上传功能

    这篇文章主要为大家详细介绍了利用MultipartFile实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • JetBrains IntelliJ IDEA 优化教超详细程

    JetBrains IntelliJ IDEA 优化教超详细程

    这篇文章主要介绍了JetBrains IntelliJ IDEA 优化教超详细程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java Integer及int装箱拆箱对比

    Java Integer及int装箱拆箱对比

    这篇文章主要介绍了Java Integer及int装箱拆箱对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java必会的Synchronized底层原理剖析

    Java必会的Synchronized底层原理剖析

    synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用。但不可否认的是synchronized依然是并发首选工具,本文就来详细讲讲
    2022-10-10
  • 教你使用IDEA搭建spring源码阅读环境的详细步骤

    教你使用IDEA搭建spring源码阅读环境的详细步骤

    这篇文章主要介绍了使用IDEA搭建spring源码阅读环境的详细步骤,本文分两步通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08

最新评论