beanutils.copyproperties 参数类型不一致如何解决,给出代码示例
时间: 2023-08-16 09:05:56 浏览: 220
当使用 BeanUtils.copyProperties 方法进行属性拷贝时,如果源对象和目标对象的属性类型不匹配,可以使用 ConvertUtils.register 方法进行类型转换注册。以下是一个示例代码:
```java
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
public class Main {
public static void main(String[] args) throws Exception {
// 注册类型转换器
ConvertUtils.register(new BigDecimalConverter(), BigDecimal.class);
// 源对象
Source source = new Source();
source.setAmount("100.00");
// 目标对象
Target target = new Target();
// 属性拷贝
BeanUtils.copyProperties(target, source);
// 输出结果
System.out.println(target.getAmount()); // 输出: 100.00(转换为 BigDecimal 类型)
}
static class Source {
private String amount;
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
}
static class Target {
private BigDecimal amount;
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
}
static class BigDecimalConverter implements Converter {
@SuppressWarnings("rawtypes")
@Override
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
if (value instanceof String) {
try {
return new BigDecimal((String) value);
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
return null;
}
}
}
```
在上述代码中,我们自定义了一个 BigDecimalConverter 类来实现 String 到 BigDecimal 的转换。通过 ConvertUtils.register 方法将该转换器注册到 BeanUtils 中,然后在属性拷贝时就会自动进行类型转换。
阅读全文