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

 更新时间:2020-08-27 09:19:59   作者:佚名   我要评论(0)

【SpringBoot】 中时间类型 序列化、反序列化、格式处理
Date
yml全局配置


spring:
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss #配置POS

【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/

总结

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

您可能感兴趣的文章:
  • springboot使用JPA时间类型进行模糊查询的方法
  • SpringBoot Redis配置Fastjson进行序列化和反序列化实现
  • SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

相关文章

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

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

    【SpringBoot】 中时间类型 序列化、反序列化、格式处理 Date yml全局配置 spring: jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss #配置POS
    2020-08-27
  • 如何利用sed命令高效删除文件的特定行

    如何利用sed命令高效删除文件的特定行

    前言 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问
    2020-08-27
  • C++ opencv ffmpeg图片序列化实现代码解析

    C++ opencv ffmpeg图片序列化实现代码解析

    0、如果路径中存在空格,用""把路径包括起来 1、使用ffmpeg命令 ffmpeg -y -framerate 10 -start_number 1 -i E:\Image\Image_%d.bmp E:\test.mp4 -y 表
    2020-08-27
  • 详解Java 反射和反射的应用场景

    详解Java 反射和反射的应用场景

    反射机制介绍 JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获
    2020-08-27
  • js利用拖放实现添加删除

    js利用拖放实现添加删除

    本文实例为大家分享了js利用拖放实现添加删除的具体代码,供大家参考,具体内容如下 实现的效果如下: 代码如下: <!DOCTYPE html> <html> <head> <meta http-e
    2020-08-27
  • VSCode插件安装完成后的配置详解

    VSCode插件安装完成后的配置详解

    VSCode插件安装完成后,有些插件如果你想要完整的使用其中的功能得在settings.json中就行配置,接下来是我常用的一些配置 { "workbench.iconTheme": "vscode
    2020-08-27
  • Python3如何在服务器打印资产信息

    Python3如何在服务器打印资产信息

    python3 在服务器上打印资产信息 pip3 install prettytable url 为 资产信息接口地址,返回为json信息。 # encoding=utf-8 import getopt import sys import pre
    2020-08-27
  • mysql查看用户授权信息的具体方法

    mysql查看用户授权信息的具体方法

    具体方法: 1、打开命令提示符 2、输入mysql -u root -p命令,然后回车 3、输入正确的密码,进入mysql命令行 4、查看用户授权信息 SHOW GRANTS FOR 'root'@'local
    2020-08-27
  • 浅谈关于C++memory_order的理解

    浅谈关于C++memory_order的理解

    看了c++并发编程实战的内存模型部分后,一直对memory_order不太懂,今天在知乎发现了百度的brpc,恰好有关于原子操作的文档,感觉解释的很好。为了加深理解,再次总
    2020-08-27
  • python 8种必备的gui库

    python 8种必备的gui库

    Python GUI 库有很多,下面给大家罗列常用的几种 GUI 库。下面介绍的这些GUI框架,能满足大部分开发人员的需要,你可以根据自己的需求,选择合适的GUI库。 1. wxPyt
    2020-08-27

最新评论