实体属性复制工具类

阅读更多
package com.bn.b2b.crp.utils;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import com.alibaba.fastjson.JSONObject;

public class Dto2Entity {
	/**
	 * 父类DTO对象转换为实体对象。如命名不规范或其他原因导致失败
	 * @param t 源转换的对象
	 * @param e 目标转换的对象
	 * 
	 */
	public static  void transalte(T t,E e){
		Method[] tms=t.getClass().getSuperclass().getDeclaredMethods();
		Method[] tes=e.getClass().getSuperclass().getDeclaredMethods();
		for(Method m1:tms){
			if(m1.getName().startsWith("get")){
				String mNameSubfix=m1.getName().substring(3);
				String forName="set"+mNameSubfix;
				for(Method m2:tes){
					if(m2.getName().equals(forName)){
                        // 如果类型一致,或者m1的返回类型是m2的参数类型的父类或接口
						boolean canContinue = m1.getReturnType().isAssignableFrom(m2.getParameterTypes()[0]);
						if (canContinue) {
							try {
								m2.invoke(e, m1.invoke(t));
								break;
							} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}
					}
				}
			}
		}
	}
	
	
	/**
	 * DTO对象转换为实体对象。如命名不规范或其他原因导致失败
	 * @param t 源转换的对象
	 * @param e 目标转换的对象
	 * 
	 */
	public static  void transalte2(T t,E e){
		Method[] tms=t.getClass().getDeclaredMethods();
		Method[] tes=e.getClass().getDeclaredMethods();
		for(Method m1:tms){
			if(m1.getName().startsWith("get")){
				String mNameSubfix=m1.getName().substring(3);
				String forName="set"+mNameSubfix;
				for(Method m2:tes){
					if(m2.getName().equals(forName)){
                        // 如果类型一致,或者m1的返回类型是m2的参数类型的父类或接口
						boolean canContinue = m1.getReturnType().isAssignableFrom(m2.getParameterTypes()[0]);
						if (canContinue) {
							try {
								m2.invoke(e, m1.invoke(t));
								break;
							} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}
					}
				}
			}
		}
	}
	
	/**
	 * DTO对象转换为实体对象。如命名不规范或其他原因导致失败
	 * 源目标数据为空不转换
	 * @param t 源转换的对象
	 * @param e 目标转换的对象
	 * 
	 */
	public static  void transalte3(T t,E e){
		Method[] tms=t.getClass().getDeclaredMethods();
		Method[] tes=e.getClass().getDeclaredMethods();
		for(Method m1:tms){
			if(m1.getName().startsWith("get")){
				String mNameSubfix=m1.getName().substring(3);
				String forName="set"+mNameSubfix;
				for(Method m2:tes){
					if(m2.getName().equals(forName)){
                        // 如果类型一致,或者m1的返回类型是m2的参数类型的父类或接口
						boolean canContinue = m1.getReturnType().isAssignableFrom(m2.getParameterTypes()[0]);
						if (canContinue) {
							try {
								if(m1.invoke(t) != null)
								{
									m2.invoke(e, m1.invoke(t));
								}
								break;
							} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}
					}
				}
			}
		}
	}
	
	/**
	 * JSONObject对象转换为实体对象。如命名不规范或其他原因导致失败
	 * @param jsonObject 源json对象
	 * @param jsonKey json对象key
	 * @param dtoKey 目标对象属性
	 * @param clazz 目标转换的class
	 * @return
	 */
	public static  T jsonObj2Dto(JSONObject jsonObject, String[] jsonKey, String[] dtoKey, Class clazz){
		for(int i = 0; i < jsonKey.length; i++)
		{
			if(jsonObject.containsKey(jsonKey[i]) && jsonObject.get(jsonKey[i]) != null)
			{
				jsonObject.put(dtoKey[i], jsonObject.get(jsonKey[i]));
			}
		}
		return JSONObject.toJavaObject(jsonObject, clazz);
	}
}

 

你可能感兴趣的:(实体属性复制工具类)