zoukankan      html  css  js  c++  java
  • 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);
    					}
    				}
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    完整的验证码识别流程基于svm(若是想提升,可优化)
    linux离线搭建Python环境及安装numpy、pandas
    帮助维度理解
    遇到eclipse安装插件一直报错问题(版本问题)
    雷林鹏分享:Java 集合框架
    雷林鹏分享:Java 数据结构
    雷林鹏分享:Java 包(package)
    雷林鹏分享:Java 接口
    雷林鹏分享:Java 封装
    雷林鹏分享:Java 抽象类
  • 原文地址:https://www.cnblogs.com/durenniu/p/10867689.html
Copyright © 2011-2022 走看看