• BeanUtils(前端赋值给后台,忽略空属性)


    package com.drn.core.util;
    
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;
    import java.util.Collection;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.FatalBeanException;
    import org.springframework.util.Assert;
    
    public abstract class BeanUtils extends org.springframework.beans.BeanUtils {
    
    	public static void copyProperties(Object source, Object target) throws BeansException {
    		Assert.notNull(source, "Source must not be null");
    		Assert.notNull(target, "Target must not be null");
    		Class<?> actualEditable = target.getClass();
    		PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);
    		for (PropertyDescriptor targetPd : targetPds) {
    			if (targetPd.getWriteMethod() != null) {
    				PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName());
    				if (sourcePd != null && sourcePd.getReadMethod() != null) {
    					try {
    						Method readMethod = sourcePd.getReadMethod();
    						if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
    							readMethod.setAccessible(true);
    						}
    						Object value = readMethod.invoke(source);
    						// 这里判断以下value是否为空 当然这里也能进行一些特殊要求的处理 例如绑定时格式转换等等
    						if (value != null) {
    							boolean isEmpty = false;
    							if (value instanceof Set) {
    								Set s = (Set) value;
    								if (s == null || s.isEmpty()) {
    									isEmpty = true;
    								}
    							} else if (value instanceof Map) {
    								Map m = (Map) value;
    								if (m == null || m.isEmpty()) {
    									isEmpty = true;
    								}
    							} else if (value instanceof List) {
    								List l = (List) value;
    								if (l == null || l.size() < 1) {
    									isEmpty = true;
    								}
    							} else if (value instanceof Collection) {
    								Collection c = (Collection) value;
    								if (c == null || c.size() < 1) {
    									isEmpty = true;
    								}
    							}
    
    							if (!isEmpty) {
    								Method writeMethod = targetPd.getWriteMethod();
    								if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) {
    									writeMethod.setAccessible(true);
    								}
    								writeMethod.invoke(target, value);
    							}
    						}
    					} catch (Throwable ex) {
    						throw new FatalBeanException("Could not copy properties from source to target", ex);
    					}
    				}
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    JVM类加载器
    Java类加载过程
    进程间8种通信方式详解
    SpringCloud教程(Finchley版本)-00:什么是SpringCloud
    pyinstaller打包web项目
    Type javax.xml.bind.JAXBContext not present
    Cannot execute request on any known server
    websocket原理
    falsk模板jinja2与Vue冲突解决方案
    关于springboot Error resolving template之类问题
  • 原文地址:https://www.cnblogs.com/durenniu/p/10867689.html
Copyright © 2020-2023  润新知