最近遇到SpringMVC写个controller类,传一个空串的字符类型过来,正常情况是会自动转成date类型的,因为数据表对应类类型就是date的

解决方法是在controller类的后面加个注解:

@InitBinder
protected void initDateFormatBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}

注意,上面的代码CustomDateEditor构造函数要传个true参数,表示允许传空字符串来进行日期类型转换

CustomDateEditor 里源码


public class CustomDateEditor extends PropertyEditorSupport {
private final DateFormat dateFormat;
private final boolean allowEmpty;
private final int exactDateLength; public CustomDateEditor(DateFormat dateFormat, boolean allowEmpty) {
this.dateFormat = dateFormat;
this.allowEmpty = allowEmpty;
this.exactDateLength = -1;
}
....
}

Spring Bean类的装载是通过BeanWrapperImpl来实现,可以写个简单的例子,验证这个问题,DispatchInfoModel 类是我自己的测试类,里面有signDate这个date类型的参数

设置为true的情况,是可以正常运行的

public class mytest {
public static void main(String[] args) {
DispatchInfoModel tm = new DispatchInfoModel();
BeanWrapper bw = new BeanWrapperImpl(tm);
bw.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
bw.setPropertyValue("signDate", "");
System.out.println(tm.getSignDate());
}
}

设置为false的情况,会抛出异常:

public class mytest {
public static void main(String[] args) {
DispatchInfoModel tm = new DispatchInfoModel();
BeanWrapper bw = new BeanWrapperImpl(tm);
bw.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false));
bw.setPropertyValue("signDate", "");
System.out.println(tm.getSignDate());
}
}

最新文章

  1. ReportingServies——SQLServer报表开发综合实例
  2. Visual Studio多版本进行切换的研究
  3. ThinkPHP 3.2.3的 R 方法
  4. 使用 Fluent API 配置/映射属性和类型
  5. 个人软件过程(psp)需求文档
  6. 谈谈 JavaScript 中的 this 指向问题
  7. spark RDD的元素顺序(ordering)测试
  8. Mysql 计算时间间隔函数
  9. 备注: ubt 16.04 安装 gtx 1060 --- 成功运行 tensorflow - gpu
  10. iOS多线程编程--NSOperation(转)
  11. 002-zookeeper 基本配置、安装启动 windows环境
  12. springboot情操陶冶-@SpringBootApplication注解解析
  13. 【ES】学习11-多桶排序
  14. 笔记关闭fn功能
  15. [Unity3D]MonoDeveloper快捷键(补全代码补全引用中文乱码tab转空格)
  16. [java] java 中Unsafe类学习
  17. Tomcat 500错误 问题集锦
  18. 1:3访问 servlet API 的两种方式(request,session等内置对象)
  19. 初见Python<6>:文件读写
  20. 002-es6字符串扩展

热门文章

  1. Windows自动执行应用程序或脚本(可以通过写bat文件定时关机等)
  2. Java8_map新增方法
  3. 解决无法修改日志时间的问题(Local time zone must be set--see zic manual page 2019 )
  4. HTTP 请求夹带(smuggling)攻击
  5. oracle创建新用户并授予权限
  6. Springcloud 配置 | 史上最全,一文全懂
  7. 手把手教你搭建织女星开发板RISC-V开发环境
  8. Spring 框架基础(01):核心组件总结,基础环境搭建
  9. three.js实现世界地图城市迁徙图
  10. Evaluation Warning : The document was created with Spire.PDF for .NET.