天天看點

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());
	}
}