BeanUtils.copyProperties 如果Integer 或Long 为null 默认赋值0

BeanUtils.copyProperties(A,B);

如果B中的Integer类型的数据是null的,那么通过这个方法复制给A后,这个null的Integer数据会变成0。

也就是它有自己的规则,如果发现Integer类型的数据如果是null的,它会自作多情的给个默认值!

这个自作多情是很让开发人员反感的!比如Integer类型的数据=null是一个逻辑业务,但是经过复制后之前的业务逻辑就不执行了!!!


今天在使用BeanUtils时发现copyProperties方法从Long到Long复制的时候,原字段为null,结果拷贝过去之后目标字段变成了0,这不是我想要的结果,在网上搜索了一下,是可以通过转换器来设置为null时的默认转换值。

[java]  view plain  copy
  1. static {  
  2.     ConvertUtils.register(new LongConverter(null), Long.class);  
  3.     ConvertUtils.register(new ShortConverter(null), Short.class);  
  4.     ConvertUtils.register(new IntegerConverter(null), Integer.class);  
  5.     ConvertUtils.register(new DoubleConverter(null), Double.class);  
  6.     ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class);  
  7. }  

于是我就把一些常用的数字型的字段的默认转换值设置成了null,然后再使用BeanUtils.copyProperties拷贝字段,Long,Integer等字段为null的就不会默认转换成0了。

你可能感兴趣的:(Java)