frtd 发表于 2015-11-14 04:04:09

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

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


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

org.apache.commons.beanutils.converters.DateConverter dateConverter = new org.apache.commons.beanutils.converters.DateConverter();
dateConverter.setUseLocaleFormat(true);
dateConverter.setPatterns(new String[]{Constants.CONTEXT_KEY_FORMAT_DATE_VALUE, Constants.CONTEXT_KEY_FORMAT_DATETIME_VALUE});
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行开始


  

String stringValue = value.toString().trim();
if (stringValue.length() == 0) {
return handleMissing(targetType);
}


  
  


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


  

package com.lmiky.jdp.base.converter;
import java.util.Date;
import org.apache.commons.beanutils.converters.DateTimeConverter;
/**
* 日期转换器
* @author lmiky
* @date 2014-1-26
*/
public class DateConverter extends DateTimeConverter {
public DateConverter() {
}
public DateConverter(Object defaultValue) {
super(defaultValue);
}
/* (non-Javadoc)
* @see org.apache.commons.beanutils.converters.AbstractConverter#getDefaultType()
*/
@SuppressWarnings("rawtypes")
protected Class getDefaultType() {
return Date.class;
}
/*
* (non-Javadoc)
* @see org.apache.commons.beanutils.converters.DateTimeConverter#convertToType(java.lang.Class, java.lang.Object)
*/
@SuppressWarnings("rawtypes")
@Override
protected Object convertToType(Class arg0, Object arg1) throws Exception {
if (arg1 == null) {
return null;
}
String value = arg1.toString().trim();
if (value.length() == 0) {
return null;
}
return super.convertToType(arg0, arg1);
}
}


  

版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: org.apache.commons.beanutils.ConversionException: No value specified for 'Date'