BeanUtils.copyProperties() 复制 BigDecimal 和 Long 到 String 类型属性失败的解决方法
BeanUtils.copyProperties() 方法只能复制同类型的属性,即源对象和目标对象的属性类型必须相同。因此,当源对象中的属性类型为 BigDecimal 或 Long,而目标对象中的属性类型为 String 时,属性复制会失败。
要解决这个问题,你可以考虑使用类型转换器(Converter)来实现属性值的转换。具体步骤如下:
-
创建一个类型转换器类,实现
org.apache.commons.beanutils.Converter接口。在该类中实现将 BigDecimal 或 Long 类型的属性值转换为 String 类型的方法。 -
在属性复制之前,通过
BeanUtils.registerConverter()方法注册该类型转换器。 -
然后再调用
BeanUtils.copyProperties()方法进行属性复制,此时就可以自动调用类型转换器进行属性值的转换了。
示例代码如下:
// 创建类型转换器
class MyConverter implements Converter {
public Object convert(Class type, Object value) {
if (value instanceof BigDecimal) {
return ((BigDecimal) value).toString();
} else if (value instanceof Long) {
return ((Long) value).toString();
}
return value;
}
}
// 注册类型转换器
BeanUtilsBean.getInstance().getConvertUtils().register(new MyConverter(), String.class);
// 属性复制
BeanUtils.copyProperties(ledgerVO, ledger);
这样就可以将 Ledger 对象中的 BigDecimal 或 Long 类型的属性值自动转换为 String 类型,然后赋值给 LedgerVO 对象中的对应属性了。
原文地址: https://www.cveoy.top/t/topic/odVg 著作权归作者所有。请勿转载和采集!