解决空属性赋值问题
问题: 之前的项目代码在运行更新新闻内容的时候用到了如下的函数:
BeanUtils.copyProperties(news,news1);
但是因为new1对象在创建的时候是没有createTime这个属性的,所以在这里复制对象到news的时候会吧creatTime的null值复制到news对象上,导致原来的creatTime属性被覆盖。因此需要把更新对象news1中的null值获取并且不传递参数。
新建一个MyBeanUtils.java:
public class MyBeanUtils {
public static String[] getNullPropertyNames(Object source){
BeanWrapper beanWrapper = new BeanWrapperImpl(source);
PropertyDescriptor[] pds = beanWrapper.getPropertyDescriptors();
List<String> nullPropertyNames = new ArrayList<>();
for(PropertyDescriptor pd:pds){
String propertyName = pd.getName();
if(beanWrapper.getPropertyValue(propertyName)==null){
nullPropertyNames.add(propertyName);
}
}
return nullPropertyNames.toArray(new String[nullPropertyNames.size()]);
}
}
获取到所有null值得参数,然后在使用BeanUtils.copyProperties的时候忽略这些参数:
@Override
public News updateNew(News news) {
News news1 = newRepository.findById(news.getId()).orElse(null);
if(news1==null){
System.out.println("未获取更新对象");
}
//BeanUtils.copyProperties(news,news1);
BeanUtils.copyProperties(news,news1, MyBeanUtils.getNullPropertyNames(news));
news1.se