天天看点

org.apache.commons.beanutils.ConversionException: No value specified for ‘BigDecimal‘

问题描述:当使用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());
	}
}