美文网首页
Spring MVC下对Request请求中日期字符串转换成Da

Spring MVC下对Request请求中日期字符串转换成Da

作者: LcYYYYYYYY | 来源:发表于2018-09-13 11:42 被阅读0次

    背景

    先介绍一下背景:
    做了几个接口接受数据,同时每个接口都会有日期字段。我发现每个接口的日期格式都略微有些不同。所以需要对不同的接口日期进行转换。

    可行性

    开篇明义的说一下可以使用的方法:

    1. 首先是最基础的。可以将dateStr拿到String类型。然后转换成Date类型。
    2. 其次使用@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)注解在实体字段上。这种方式的优点是:可以灵活的定义接收的类型;缺点很明显:不能全局统一处理,需要为每个需要转换字段都加注解太麻烦。提示:@DateTimeFormat注解还有别的参数。有一些通用的格式以供快速使用。
    3. 在controller中写一个binder(我自己叫绑定器)在binder方法上加上@InitBinder注解就可以将传入这个controller的参数转换。这个不止能够转换日期格式,其实基本上什么都能转一下。
        /**
         * 绑定一个日期转换, 将UTC字符串转为date类型
         * @param binder
         */
        @InitBinder
        public void initBinder(WebDataBinder binder){
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    
            binder.registerCustomEditor(Date.class, new CustomDateEditor(simpleDateFormat, false));
        }
    
    1. 自定义DateConverterConfig重写convert方法。实现一下spring提供的Converter,重写里面的convert方法:
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import org.springframework.core.convert.converter.Converter;
    import org.springframework.stereotype.Component;
    
    /**
     * 全局handler前日期统一处理
     * @author wanghh
     * @date 2018/1/11
     */
    @Component
    public class DateConverterConfig implements Converter<String, Date> {
    
        private static final List<String> formarts = new ArrayList<>(4);
        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;
        }
    
    }
    

    参考文章:
    spring Boot实践--前端字符串日期自动转换成后台date类型

    相关文章

      网友评论

          本文标题:Spring MVC下对Request请求中日期字符串转换成Da

          本文链接:https://www.haomeiwen.com/subject/bgcwgftx.html