问题描述:当使用org.apache.commons.beanutils.BeanUtils进行对象拷贝时,遇到BigDecimal的属性会报错No value specified for ‘BigDecimal’
问题重现:
1.新增类:A
import java.math.BigDecimal;
public class A {
private String name;
private BigDecimal money;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getMoney() {
return money;
}
public void setMoney(BigDecimal money) {
this.money = money;
}
}
2.新增类:B
import java.math.BigDecimal;
public class B {
private String name;
private BigDecimal money;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getMoney() {
return money;
}
public void setMoney(BigDecimal money) {
this.money = money;
}
}
3.测试类:DemoTest
import org.apache.commons.beanutils.BeanUtils;
/**
* 测试类
* @author shixiangcheng
* 2020-10-14
*/
public class DemoTest {
public static void main(String [] args) throws Exception{
A a=new A();
a.setName("张三");
B b=new B();
//将对象a复制到对象b
BeanUtils.copyProperties(b,a);
System.out.println(b.getName()+","+b.getMoney());
}
}
执行测试类
Exception in thread "main" org.apache.commons.beanutils.ConversionException: No value specified for 'BigDecimal'
at org.apache.commons.beanutils.converters.AbstractConverter.handleMissing(AbstractConverter.java:310)
at org.apache.commons.beanutils.converters.AbstractConverter.convert(AbstractConverter.java:136)
at org.apache.commons.beanutils.converters.ConverterFacade.convert(ConverterFacade.java:60)
at org.apache.commons.beanutils.BeanUtilsBean.convert(BeanUtilsBean.java:1074)
at org.apache.commons.beanutils.BeanUtilsBean.copyProperty(BeanUtilsBean.java:437)
at org.apache.commons.beanutils.BeanUtilsBean.copyProperties(BeanUtilsBean.java:286)
at org.apache.commons.beanutils.BeanUtils.copyProperties(BeanUtils.java:137)
at DemoTest.main(DemoTest.java:13)
解决方案:
1、定义转换器
import java.math.BigDecimal;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.BigDecimalConverter;
/**
* 测试类
* @author shixiangcheng
* 2020-10-14
*/
public class DemoTest {
public static void main(String [] args) throws Exception{
A a=new A();
a.setName("张三");
B b=new B();
//自定义转换器
BigDecimalConverter bd = new BigDecimalConverter(BigDecimal.ZERO);
ConvertUtils.register(bd, java.math.BigDecimal.class);
//将对象a复制到对象b
BeanUtils.copyProperties(b,a);
System.out.println(b.getName()+","+b.getMoney());
}
}
2.使用org.springframework.beans.BeanUtils
import org.springframework.beans.BeanUtils;
/**
* 测试类
* @author shixiangcheng
* 2020-10-14
*/
public class DemoTest {
public static void main(String [] args) throws Exception{
A a=new A();
a.setName("张三");
B b=new B();
//将对象a复制到对象b
BeanUtils.copyProperties(a, b);
System.out.println(b.getName()+","+b.getMoney());
}
}