当前位置: 首页 > news >正文

【开发新的】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@Overrideprotected 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());}}
}

原版实现:

    public void populate(final Object bean, final Map<String, ? extends Object> properties)throws IllegalAccessException, InvocationTargetException {// Do nothing unless both arguments have been specifiedif ((bean == null) || (properties == null)) {return;}if (log.isDebugEnabled()) {log.debug("BeanUtils.populate(" + bean + ", " +properties + ")");}// Loop through the property name/value pairs to be setfor(final Map.Entry<String, ? extends Object> entry : properties.entrySet()) {// Identify the property name and value(s) to be assignedfinal String name = entry.getKey();if (name == null) {continue;}// Perform the assignment for this propertysetProperty(bean, name, entry.getValue());}}

相关文章:

  • C# Onnx 用于边缘检测的轻量级密集卷积神经网络LDC
  • Kafka - 监控工具 Kafka Eagle:实时洞察Kafka集群的利器
  • P2107 小Z的AK计划
  • 如何读懂深度学习python项目,以`Multi-label learning from single positive label`为例
  • Fourier分析导论——第2章——Fourier级数的基本属性(E.M. Stein R. Shakarchi)
  • 一篇博客读懂顺序表 —— Sequence-List
  • FIFO 位宽转换
  • 力扣740. 删除并获得点数(动态规划)
  • Debian或Ubuntu静态交叉编译arm和aarch64
  • miniconda快速安装
  • 我的云栖大会之旅:见证云计算创新的15年
  • 使用springboot对Elasticsearch 进行索引的增、删、改、查
  • 企业网络带宽使用情况检查技巧
  • Vite+Vue3项目全局引入scss文件
  • 【蓝桥杯选拔赛真题44】python小蓝晨跑 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
  • ES6 学习笔记(一)let,const和解构赋值
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • js算法-归并排序(merge_sort)
  • Laravel Mix运行时关于es2015报错解决方案
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Puppeteer:浏览器控制器
  • unity如何实现一个固定宽度的orthagraphic相机
  • V4L2视频输入框架概述
  • webpack+react项目初体验——记录我的webpack环境配置
  • 订阅Forge Viewer所有的事件
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 简单基于spring的redis配置(单机和集群模式)
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 算法-图和图算法
  • 小程序 setData 学问多
  • 在electron中实现跨域请求,无需更改服务器端设置
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # 飞书APP集成平台-数字化落地
  • ${factoryList }后面有空格不影响
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (done) 两个矩阵 “相似” 是什么意思?
  • (阿里云万网)-域名注册购买实名流程
  • (定时器/计数器)中断系统(详解与使用)
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Core 中插件式开发实现
  • .netcore如何运行环境安装到Linux服务器
  • .NET程序员迈向卓越的必由之路
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • ::前边啥也没有
  • @AliasFor注解
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [C++]——带你学习类和对象