VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Spring MVC处理日期字符串参数自动转换成后台Date类型

问题描述

当前台提交日期字符串到后台时,以字符串形式传输,若后台接收时采用Date类型,则会报格式转换错误的异常.

解决

方式一:

将 @DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”) 注解添加到实体类的字段上.

  • 优点:可以灵活定义接收的类型
  • 缺点:不能实现全局统一处理,要为每个需要转换的字段添加注解

方式二:

定义一个 BaseController 基础类,在类中使用 @InitBinder 注解定义一个全局的日期格式转换的方法,在定义其它Controller时继承 BaseController 即可.

@InitBinder
public void initBinder(ServletRequestDataBinder binder) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));        
}
  • 优点:可以实现全局处理,无需关注具体需要转换的日期字段
  • 缺点:只能定义一种日期格式

方式三(推荐):

自定义一个 DateConverterConfig 类,实现 spring 提供的 Converter,重写里面的 convert() 方法.

/**
 * 全局 日期格式 转换器

 */
@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;
    }
 
}
  • 优点:灵活度高,可以在静态代码块里定义任意的日期格式,然后配置对应的正则表达式,兼顾了前两种方式.
来源:https://www.cnblogs.com/herokevin/p/15811675.html

相关教程