前言: BeanUtils默认的populate方法不会忽略空值和null值,在特定场景,我们需要原始的值避免被覆盖,所以这里提供一种自定义实现方式。文章来源:https://www.toymoban.com/news/detail-740732.html
package com.hmwl.service.program;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.beanutils.ContextClassLoaderLocal;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
/**
* @Author: martin
* @Date: 2023/11/01 15:13 pm
* @Description: apache common 原版populate不会过滤null值,不符合使用场景
*/
@Slf4j
public class CustomBeanUtils extends BeanUtilsBean {
private static final ContextClassLoaderLocal<CustomBeanUtils>
BEANS_BY_CLASSLOADER = new ContextClassLoaderLocal<CustomBeanUtils>() {
// Creates the default instance used when the context classloader is unavailable
@Override
protected CustomBeanUtils initialValue() {
return new CustomBeanUtils();
}
};
public static CustomBeanUtils getInstance() {
return BEANS_BY_CLASSLOADER.get();
}
public static void setInstance(final CustomBeanUtils newInstance) {
BEANS_BY_CLASSLOADER.set(newInstance);
}
public static void populateIgnoreEmpty(final Object bean, final Map<String, ? extends Object> properties) {
try {
CustomBeanUtils.getInstance().populateIgnoreNull(bean, properties);
} catch (IllegalAccessException e) {
log.error(e.getMessage());
} catch (InvocationTargetException e) {
log.error(e.getMessage());
}
}
private final void populateIgnoreNull(final Object bean, final Map<String, ? extends Object> properties)
throws IllegalAccessException, InvocationTargetException {
if ((bean == null) || (properties == null)) {
return;
}
if (log.isDebugEnabled()) {
log.debug("BeanUtils.populate(" + bean + ", " +
properties + ")");
}
for (final Map.Entry<String, ? extends Object> entry : properties.entrySet()) {
final String name = entry.getKey();
// 增强下,因为可能多次调用,当value为null的时候不赋值
if (name == null || entry.getValue() == null) {
continue;
}
setProperty(bean, name, entry.getValue());
}
}
}
原版实现:文章来源地址https://www.toymoban.com/news/detail-740732.html
public void populate(final Object bean, final Map<String, ? extends Object> properties)
throws IllegalAccessException, InvocationTargetException {
// Do nothing unless both arguments have been specified
if ((bean == null) || (properties == null)) {
return;
}
if (log.isDebugEnabled()) {
log.debug("BeanUtils.populate(" + bean + ", " +
properties + ")");
}
// Loop through the property name/value pairs to be set
for(final Map.Entry<String, ? extends Object> entry : properties.entrySet()) {
// Identify the property name and value(s) to be assigned
final String name = entry.getKey();
if (name == null) {
continue;
}
// Perform the assignment for this property
setProperty(bean, name, entry.getValue());
}
}
到了这里,关于【开发新的】apache common BeanUtils忽略null值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!