【开发新的】apache common BeanUtils忽略null值

这篇具有很好参考价值的文章主要介绍了【开发新的】apache common BeanUtils忽略null值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言: BeanUtils默认的populate方法不会忽略空值和null值,在特定场景,我们需要原始的值避免被覆盖,所以这里提供一种自定义实现方式。

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream

    一、问题现象 在导出 Excel 过程中,程序报错如下: 二、问题原因 通过报错信息可以看出,这个异常通常出现在你在代码里使用了 org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream 这个类,但是该类所在的依赖包 commons-io 并没有被引入或不存在。 三、解决方案 解决这个问题

    2024年02月10日
    浏览(65)
  • 错误-maven工程,程序包org.apache.commons.xxx不存在,Java:不支持发行版本5

    因为最新的idea界面中文支持较好,就更新了idea,但是发现在导入以前的项目时报了两个错误 程序包org.apache.commons.xxx不存在, Java:不支持发行版本5 那就逐个解决一下 原因就一个,从Java 9开始,以后的编译器无法再生成Java 5二进制文件 Java及其虚拟机高度向后兼容,可以使

    2024年02月01日
    浏览(66)
  • Flink连接Hbase时的kafka报错:java.lang.NoClassDefFoundError: org/apache/kafka/common/utils/ThreadUtils

    书接上文 【Flink实时数仓】需求一:用户属性维表处理-Flink CDC 连接 MySQL 至 Hbase 实验及报错分析http://t.csdn.cn/bk96r 我隔了一天跑Hbase中的数据,发现kafka报错,但是kafka在这个代码段中并没有使用,原因就是我在今天的其他项目中添加的kafka依赖导致了冲突。 注释掉kafka依赖,

    2024年02月04日
    浏览(50)
  • 报错Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/io

    报错: 原因 :这里version 版本未指定,去远程仓库找最新发布版本的构件,可能会冲突 先根据version版本去本地仓库找,如果本地仓库找不到,再判断版本号是否为明确版本号,如果版本号明确,会从远程仓库下载相应版本的依赖 如果版本号不明确,如 RELEASE、LATEST 和 SNAP

    2024年04月12日
    浏览(53)
  • Spring学习笔记(一)【BeanUtils.copyProperties方法】

    简单地说,拷贝就是将一个类中的属性拷贝到另一个中,对于BeanUtils.copyProperties来说, 必须保证属性名和类型是相同的,因为它是根据get和set方法来赋值的 1.1、 浅拷贝 浅拷贝对于 基本数据类型 就是直接进行 值传递 ,在内存的另一个空间内存放,修改这个值不会影响到拷

    2024年01月16日
    浏览(34)
  • apache commons-dbcp Apache Commons DBCP 软件实现数据库连接池 commons-dbcp2

    许多Apache项目支持与关系型数据库进行交互。为每个用户创建一个新连接可能很耗时(通常需要多秒钟的时钟时间),以执行可能需要毫秒级时间的数据库事务。对于一个公开托管在互联网上的应用程序,在同时在线用户数量可能非常大的情况下,为每个用户打开一个连接可

    2024年03月17日
    浏览(59)
  • 解决用MybatisPlus修改字段时会自动忽略传值为null的字段

    产生原因 我们使用mybatis-plus框架的时候会产生一个很尴尬的情况,在使用mybatis-plus的自带封装的update的方法的时候,如果你想要修改某个字段为null值,则会自动忽略修改你这个字段,导致这个字段还是原来未修改前的值 。 解决方法 根据查阅相关资料,总结出以下几点解决

    2024年02月16日
    浏览(58)
  • Apache Common 工具介绍

    Apache Common包含的工具库众多,主要为Java开发者提供各种实用的功能和组件。其中包括数据结构处理、IO操作、网络编程、数学运算、字符串处理等等多种功能模块。这些工具库的使用可以显著提高开发效率,使得程序员可以将更多的精力集中在业务逻辑的实现上,而不需要从

    2024年01月19日
    浏览(45)
  • Apache Commons Text 库简介

    简单地说,Apache Commons Text 库包含许多有用的实用程序方法来处理 字符串 ,超出了核心 Java 提供的方法。 在这个快速介绍中,我们将看到Apache Commons Text是什么,它的用途,以及使用库的一些实际示例。 让我们首先将以下 Maven 依赖项添加到我们的 pom.xml : 您可以在Maven 中央

    2024年02月13日
    浏览(64)
  • Mybatis 日志(Apache Commons Logging)

    之前我们介绍了使用JDK Log打印Mybatis运行时的日志;本篇我们介绍使用Apache Commons Logging打印Mybatis运行时的日志。 如何您对Mybatis中使用JDK Log不太了解,可以参考: Mybatis 日志(JDK Log) https://blog.csdn.net/m1729339749/article/details/132565362 在mybatis-config.xml文件中配置logImpl 在配置文件中,

    2024年02月07日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包