zoukankan      html  css  js  c++  java
  • 【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/

  • 相关阅读:
    Grid 拾遗
    WPF 依赖属性
    升级cordova
    oracle比较一行的最大值或最小值
    nginx完全关闭log
    hive计算周一的日期
    查看linux文件目录的大小和文件夹包含的文件数
    linux设置服务器时间同步
    oracle取出多个字段列中的最大值和最小值
    oracle SQL语句取本周本月本年的数据
  • 原文地址:https://www.cnblogs.com/Sky0914/p/13568746.html
Copyright © 2011-2022 走看看