springmvc继承Converter格式化时间不起作用

感想:也许问题不向你想象中那么复杂,静下心来思考可能引起的情况,也许他很简单,只是你一个疏忽(因为你这个疏忽成为了最大的bug)

感想由来:

如标题我想springmvc接收参数时将String格式化时间类型Date,网上有大量例子,是十分简单实现的,但是试了每个例子,都没有用,查资料看官网看源码,磨了4天,心力交瘁。

开始才采用最简单的@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")注解类上发现没用,实在找不出原因

后来改用的是implements Converter来实现,也是网上找的例子,

public class DateConverter implements Converter {

	@Override
    public Date convert(String source) {
        SimpleDateFormat sdf = getSimpleDateFormat(source);
        try {
            Date date = sdf.parse(source);
            return date;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    private SimpleDateFormat getSimpleDateFormat(String source) {
        SimpleDateFormat sdf = new SimpleDateFormat();
        if (Pattern.matches("^\\d{4}-\\d{2}-\\d{2}$", source)) { // yyyy-MM-dd
            sdf = new SimpleDateFormat("yyyy-MM-dd");
        } else if (Pattern.matches("^\\d{4}-\\d{2}-\\d{2} \\d{2}-\\d{2}-\\d{2}$", source)) { // yyyy-MM-dd HH-mm-ss
            sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
        } else if (Pattern.matches("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$", source)) { // yyyy-MM-dd HH:mm:ss
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        } else if (Pattern.matches("^\\d{4}/\\d{2}/\\d{2}$", source)) { // yyyy/MM/dd
            sdf = new SimpleDateFormat("yyyy/MM/dd");
        } else if (Pattern.matches("^\\d{4}/\\d{2}/\\d{2} \\d{2}/\\d{2}/\\d{2}$", source)) { // yyyy/MM/dd HH/mm/ss
            sdf = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss");
        }  else if (Pattern.matches("^\\d{4}\\d{2}\\d{2}$", source)) { // yyyyMMdd
            sdf = new SimpleDateFormat("yyyyMMdd");
        }  else if (Pattern.matches("^\\d{4}\\d{2}\\d{2} \\d{2}\\d{2}\\d{2}$", source)) { // yyyyMMdd HHmmss
            sdf = new SimpleDateFormat("yyyyMMdd HHmmss");
        } else if (Pattern.matches("^\\d{4}\\.\\d{2}\\.\\d{2}$", source)) { // yyyy.MM.dd
            sdf = new SimpleDateFormat("yyyy.MM.dd");
        }  else if (Pattern.matches("^\\d{4}\\.\\d{2}\\.\\d{2} \\d{2}\\.\\d{2}\\.\\d{2}$", source)) { // yyyy.MM.dd HH.mm.ss
            sdf = new SimpleDateFormat("yyyy.MM.dd HH.mm.ss");
        }else{
            System.out.println("TypeMismatchException");
            throw new TypeMismatchException();
        }
        return sdf;
    }

}

spring-mvc配置添加如下

 
      
          
              
          
      
    
    

很普遍的例子,DateConverter也确实注入了,为什么还是不行呢?崩溃了有没有,明明没问题

然后我再换种方式来实现如下

@InitBinder 
    protected void initBinder(WebDataBinder binder) {  
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");  
        dateFormat.setLenient(false);  
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

它不是全局的,得在你当前的control下才实现,这个方法也确实对我有用,我就想把它放到BaseAction里,这样我每个继承与他的Action也就实现了,于是新大陆发现了

springmvc继承Converter格式化时间不起作用_第1张图片

什么情况,早就有了,全部被这个覆盖了,顿时吐血了有没有,几天下来的bug就是这个

特记!!!

你可能感兴趣的:(错误集锦)