zoukankan      html  css  js  c++  java
  • SpringBoot全局时间转换器

    SpringBoot全局时间转换器

    日常开发中,接收时间类型参数处处可见,但是针对不同的接口。往往需要的时间类型不一致
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")需要每个属性上都要增加,大大增加工作量
    可通过实现Converter接口,进行全局时间转换

    全局时间转换代码

    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;
    
    /**
     * 非requestbody方式接收date参数转换器
     * requestbody形式,采用json序列化进行配置格式
     * 本转换器只接收-为间隔。统一返回给前端的也以-为间隔
     * 若新增类型,可增加formats与正则匹配进行转换
     */
    @Component
    public class DateConverterConfig implements Converter<String, Date> {
    
        private static final List<String> formarts = new ArrayList<>(4);
    
        /**
         * 支持的格式
         * 既然已经使用了转换器,就不使用yyyy/MM等形式了。
         * 全局均使用yyyy-MM形式
         */
        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) {
            String value = source.trim();
            if ("".equals(value)) {
                return null;
            }
            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 boolean value '" + source + "'");
            }
        }
    
        /**
         * 格式化日期
         *
         * @param dateStr String 字符型日期
         * @param format  String 格式
         * @return Date 日期
         */
        public Date parseDate(String dateStr, String format) {
            Date date = null;
            try {
                DateFormat dateFormat = new SimpleDateFormat(format);
                date = dateFormat.parse(dateStr);
            } catch (Exception e) {
    
            }
            return date;
        }
    
    }
    
    一万年太久,只争朝夕!
  • 相关阅读:
    多线程系列教材 (四)- 常见的线程安全相关的面试题
    多线程系列教材 (三)- Java 多线程同步 synchronized 详解
    多线程系列教材 (二)- Java 常见的线程方法
    UPC-最优分解问题(贪心)
    【数论】【模板】
    UPC-人品指数(模拟)
    UPC-趾压板矩阵(强行找规律)
    UPC-排队出发+AcWing-耍杂技的牛(推公式的贪心)
    UPC-购买巧克力(贪心)
    前端——多行三列模式页面布局
  • 原文地址:https://www.cnblogs.com/chaoba/p/14207403.html
Copyright © 2011-2022 走看看