你做属性拷贝的时候类型为BigDecimal属性的值是null,所以会出现这样的错误。
因为如果你看BeanUtils的源代码就知道,对于BigDecimal类型的属性其对应的转换器类BigDecimalConverter在调用convert方法的时候会做如下判断:
public Object convert(Class type, Object value) {
if (value == null) {
if (useDefault) {
return (defaultValue);
} else {
throw new ConversionException("No value specified");
}
} if (value instanceof BigDecimal) {
return (value);
} try {
return (new BigDecimal(value.toString()));
} catch (Exception e) {
if (useDefault) {
return (defaultValue);
} else {
throw new ConversionException(e);
}
} }
红色部分就是产生这个错误的原因,首先被拷贝对象的该属性值为null,同时useDefault是false(这个在BigDecimalConverter类默认实例化的时候就定义了,如下代码:)
public BigDecimalConverter() { this.defaultValue = null;
this.useDefault = false; }
所以会产生你所遇到的错误。对bBean这个对象中的BigDecimal类型属性进行赋值,然后进行属性拷贝,就可以避免你的错误。
因为如果你看BeanUtils的源代码就知道,对于BigDecimal类型的属性其对应的转换器类BigDecimalConverter在调用convert方法的时候会做如下判断:
public Object convert(Class type, Object value) {
if (value == null) {
if (useDefault) {
return (defaultValue);
} else {
throw new ConversionException("No value specified");
}
} if (value instanceof BigDecimal) {
return (value);
} try {
return (new BigDecimal(value.toString()));
} catch (Exception e) {
if (useDefault) {
return (defaultValue);
} else {
throw new ConversionException(e);
}
} }
红色部分就是产生这个错误的原因,首先被拷贝对象的该属性值为null,同时useDefault是false(这个在BigDecimalConverter类默认实例化的时候就定义了,如下代码:)
public BigDecimalConverter() { this.defaultValue = null;
this.useDefault = false; }
所以会产生你所遇到的错误。对bBean这个对象中的BigDecimal类型属性进行赋值,然后进行属性拷贝,就可以避免你的错误。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货