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;
        }
    
    }
    
    一万年太久,只争朝夕!
  • 相关阅读:
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details
    Visual Studio断点调试, 无法监视变量, 提示无法计算表达式
    ASP.NET MVC中MaxLength特性设置无效
    项目从.NET 4.5迁移到.NET 4.0遇到的问题
    发布网站时应该把debug设置false
    什么时候用var关键字
    扩展方法略好于帮助方法
    在基类构造器中调用虚方法需谨慎
    ASP.NET MVC中商品模块小样
    ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积02, 在界面实现
  • 原文地址:https://www.cnblogs.com/chaoba/p/14207403.html
Copyright © 2011-2022 走看看