项目场景:
struts漏洞修复,ajax请求json转换异常。
【实战问题】【12】报错org.apache.commons.lang.exception.NestableRuntimeException
复制bean异常org.apache.commons.beanutils.ConversionException: No value specified for ‘Date’
问题描述:
List<TravelnetChargeTaskEx> jsonList = new ArrayList<TravelnetChargeTaskEx>();
TravelnetChargeTaskEx taskEx ;
ChargeTask ct;
for(Object task:conformList){
ct = (ChargeTask)task;
taskEx = new TravelnetChargeTaskEx();
ConvertUtils.register(new DateConverter(null), java.util.Date.class);//添加这一行代码,重新注册一个转换器,
BeanUtils.copyProperties(taskEx, ct);
if(ct.getDealRecords().size()>0){
int resultIndex = ct.getDealRecords().size()-1;
DealRecord resultRecord = ct.getDealRecords().get(resultIndex);
taskEx.setDealResult(resultRecord.getResult());
}
if(ct.getStatus()==ChargeTask.CHARGE_TASK_RETURN2SERVICE || ct.getStatus()==ChargeTask.CHARGE_TASK_CLOSED || ct.getStatus()==ChargeTask.CHARGE_TASK_PASSED || ct.getStatus()==ChargeTask.CHARGE_TASK_PAYOFF){
taskEx.setStatusStrEx(Constants.CHARGE_STATUS_DEALING);
}else{
taskEx.setStatusStrEx(taskEx.getStatusStr());
}
jsonList.add(taskEx);
}
解决方案:
org.apache.commons.lang.exception.NestableRuntimeException
出现这个问题的原因是jar包不全,需要以下jar包:
commons-beanutils-1.8.3.jar
commons-lang-2.5.jar
ezmorph-1.0.6.jar
json-lib-2.3-jdk15.jar
接着报错java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory,需要以下jar包
commons-logging-1.1.1.jar
接着又报错java.lang.NoClassDefFoundError: Could not initialize class net.sf.json.JSONArray,需要以下jar包
commons-collections 3.2
如果还出现报错java.lang.ClassNotFoundException: org.apache.commons.lang.*。注意jar包的版本,如果用的是lang3和collections4的话,会有此问题。需改为与上面一致的版本号
复制bean异常org.apache.commons.beanutils.ConversionException: No value specified for ‘Date’
出现这个问题的原因是jar包不全,需要以下jar包:
BeanUtils.copyProperties 复制bean异常org.apache.commons.beanutils.ConversionException: No value specified for ‘Date’
在使用 org.apache.commons.beanutils.BeanUtils.copyProperties(dest, orig)方法复制对象属性时,
若bean中有Date类型的属性,且可能为null时,可能会抛出一个异常:org.apache.commons.beanutils.ConversionException: No value specified for ‘Date’,
解决方案如下:
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.converters.DateConverter;
ConvertUtils.register(new DateConverter(null), java.util.Date.class);//添加这一行代码,重新注册一个转换器,也可以自定义
BeanUtils.copyProperties(dest, orig);