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

原文 

https://segmentfault.com/a/1190000023284833

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 【SpringBoot】 中时间类型 序列化、反序列化、格式处理

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址