org.apache.commons.beanutils.ConversionException: No value specified for 'Date'

环境:org.apache.commons.beanutils的版本号为1.8.3


注册时间转换器代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. org.apache.commons.beanutils.converters.DateConverter dateConverter = new org.apache.commons.beanutils.converters.DateConverter();  
  2. dateConverter.setUseLocaleFormat(true);  
  3. dateConverter.setPatterns(new String[]{Constants.CONTEXT_KEY_FORMAT_DATE_VALUE, Constants.CONTEXT_KEY_FORMAT_DATETIME_VALUE});  
  4. ConvertUtils.register(dateConverter, Date.class);  

当提交的时间没有值的时候,会报出org.apache.commons.beanutils.ConversionException: No value specified for 'Date'错误,查看了apache源代码,发现原因是因为org.apache.commons.beanutils.converters.DateConverter转换String为Date时,发现是空值,即报出错误,源代码如下


org.apache.commons.beanutils.converters.DateTimeConverter类第321行开始

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. String stringValue = value.toString().trim();  
  2. if (stringValue.length() == 0) {  
  3.     return handleMissing(targetType);  
  4. }  



解决方案:

自己写个日期转换类,由于org.apache.commons.beanutils.converters.DateConverter类被标记为final,不可继承,所以继承DateConverter的父类DateTimeConverter,类的内容是在org.apache.commons.beanutils.converters.DateConverter内容上增加了对convertToType方法的重载,完整代码如下


[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.lmiky.jdp.base.converter;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.apache.commons.beanutils.converters.DateTimeConverter;  
  6.   
  7. /** 
  8.  * 日期转换器 
  9.  * @author lmiky 
  10.  * @date 2014-1-26 
  11.  */  
  12. public class DateConverter extends DateTimeConverter {  
  13.   
  14.     public DateConverter() {  
  15.     }  
  16.   
  17.     public DateConverter(Object defaultValue) {  
  18.         super(defaultValue);  
  19.     }  
  20.   
  21.     /* (non-Javadoc) 
  22.      * @see org.apache.commons.beanutils.converters.AbstractConverter#getDefaultType() 
  23.      */  
  24.     @SuppressWarnings("rawtypes")  
  25.     protected Class getDefaultType() {  
  26.         return Date.class;  
  27.     }  
  28.   
  29.     /* 
  30.      * (non-Javadoc) 
  31.      * @see org.apache.commons.beanutils.converters.DateTimeConverter#convertToType(java.lang.Class, java.lang.Object) 
  32.      */  
  33.     @SuppressWarnings("rawtypes")  
  34.     @Override  
  35.     protected Object convertToType(Class arg0, Object arg1) throws Exception {  
  36.         if (arg1 == null) {  
  37.             return null;  
  38.         }  
  39.         String value = arg1.toString().trim();  
  40.         if (value.length() == 0) {  
  41.             return null;  
  42.         }  
  43.         return super.convertToType(arg0, arg1);  
  44.     }  
  45. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值