SpringMVC日期类型接收空值异常问题解决方法

 更新时间:2019年10月28日 14:23:17   作者:smileNicky  
这篇文章主要介绍了SpringMVC日期类型接收空值异常问题解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

最近遇到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());
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java原子类中的AtomicInteger类详解

    Java原子类中的AtomicInteger类详解

    这篇文章主要介绍了Java原子类中的AtomicInteger类详解,原子类可以保证对"变量"操作的,原子性、有序性、可见性,我们可以通过AtomicInteger类,来看看它们是怎样工作的,需要的朋友可以参考下
    2023-10-10
  • Java数组队列及环形数组队列超详细讲解

    Java数组队列及环形数组队列超详细讲解

    队列是一个有序列表,可以用数组和链表来实现,队列有一个原则。即:先存入队列的数据要先取出,后存入的要后取出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • Java实现的并发任务处理实例

    Java实现的并发任务处理实例

    这篇文章主要介绍了Java实现的并发任务处理方法,结合实例形式较为详细的分析了基于线程操作并发任务的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 在Filter中不能注入bean的问题及解决

    在Filter中不能注入bean的问题及解决

    这篇文章主要介绍了在Filter中不能注入bean的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java中的ReentrantLock使用解析

    Java中的ReentrantLock使用解析

    这篇文章主要介绍了Java中的ReentrantLock使用解析,ReentrandLock即可重入锁,可重入锁解决的是重入锁定的问题,重入锁定指的是当一个线程执行逻辑时,需要两次获取锁,而该锁不可重入就会导致内部嵌套无法获取锁导致Reentrance Lockout发生,需要的朋友可以参考下
    2023-11-11
  • Java实现自动获取法定节假日详细代码

    Java实现自动获取法定节假日详细代码

    这篇文章主要给大家介绍了关于Java实现自动获取法定节假日的相关资料,获取并处理节假日数据是一个常见需求,特别是在需要安排任务调度、假期通知等功能的场景中,需要的朋友可以参考下
    2024-05-05
  • 浅谈HTTP使用BASIC认证的原理及实现方法

    浅谈HTTP使用BASIC认证的原理及实现方法

    下面小编就为大家带来一篇浅谈HTTP使用BASIC认证的原理及实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Mybatis入门教程之新增、更新、删除功能

    Mybatis入门教程之新增、更新、删除功能

    这篇文章给大家介绍了Mybatis进行基本的增删改操作,非常不错,具有参考借鉴价值,需要的的朋友参考下
    2017-02-02
  • Mybatis-Plus主键生成策略的方法

    Mybatis-Plus主键生成策略的方法

    本文主要介绍了Mybatis-Plus主键生成策略的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • SpringCloud Bus如何实现配置刷新

    SpringCloud Bus如何实现配置刷新

    这篇文章主要介绍了SpringCloud Bus如何实现配置刷新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09

最新评论