Reflection

배고픈 징징이 ㅣ 2023. 1. 20. 09:58

Map을 Vo로, Vo를 Map으로 변경해주는 Converter

import org.apache.commons.lang.ArrayUtils;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;

public class MapConverter {
    public static Object mapToVO(Map map, Object object) 
        Iterator iterator = map.keySet().iterator();
        String key = "", setMethodString="set" , methodString = "";

        while (iterator.hasNext()){
            key = (String)iterator.next();
            methodString = setMethodString + key.substring(0,1).toUpperCase() + key.substring(1);

            try {
                Method[] methods = object.getClass().getDeclaredMethods();
                for(int i = 0; i < methods.length; i++){
                    if(methodString.equals(methods[i].getName())){
                        methods[i].invoke(object, map.get(key));
                    }
                }
            }catch (InvocationTargetException e){
                e.printStackTrace();
            }catch (IllegalAccessException e){
                e.printStackTrace();
            }
        }

        return object;
    }

    public static List<Object> listMapToListVo(List<Map> ListMap, Object object) throws Exception{
        List<Object> listVo = new ArrayList<>();
        for(Map map : ListMap){
            Iterator iterator = map.keySet().iterator();
            String key = "", setMethodString="set" , methodString = "";

            Object objectVar = object.getClass().newInstance();
            while(iterator.hasNext()){
                key = (String)iterator.next();
                methodString = setMethodString + key.substring(0,1).toUpperCase() + key.substring(1);

                try {
                    Method[] methods = getSuperClassMap(objectVar.getClass());
                    for(int i =0; i < methods.length; i++){
                        if(methodString.equals(methods[i].getName())){
                            methods[i].invoke(objectVar, map.get(key));
                        }
                    }
                }catch (InvocationTargetException e){
                    e.printStackTrace();
                }catch (IllegalAccessException e){
                    e.printStackTrace();
                }
            }
            listVo.add(objectVar);
        }

        return listVo;
    }

    public static List<Map> listVOToListMap(List<Object> ListObject) {
        List<Map> listMap = new ArrayList<>();
        try {
            for(Object obj : ListObject){
                Field[] fields = getSuperClassVo(obj.getClass());
                Map resultMap = new HashMap();
                for(int i = 0; i < fields.length-1; i++){
                    fields[i].setAccessible(true);
                    resultMap.put(fields[i].getName(), fields[i].get(obj));
                }

                listMap.add(resultMap);
            }

            return listMap;
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Map VOToMap(Object object) {
        try {
            Field[] fields = object.getClass().getDeclaredFields();
            Map resultMap = new HashMap();
            for(int i = 0; i<=fields.length-1; i++){
                fields[i].setAccessible(true);
                resultMap.put(fields[i].getName(), fields[i].get(object));
            }

            return resultMap;
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Field[] getSuperClassVo(Class reqClass){
        Field[] fields = reqClass.getDeclaredFields();
        Field[] fields2 = reqClass.getSuperclass().getDeclaredFields();

        return (Field[]) ArrayUtils.addAll(fields, fields2);
    }

    public static Method[] getSuperClassMap(Class reqClass){
        Method[] methods = reqClass.getDeclaredMethods();
        Method[] methods2 = reqClass.getSuperclass().getDeclaredMethods();

        return (Method[]) ArrayUtils.addAll(methods, methods2);
    }
반응형

'Java' 카테고리의 다른 글

VO 데이터 추출  (0) 2023.01.26
Ehcache3 & SpEL  (0) 2023.01.26
@Transactional  (0) 2023.01.19
[안전한 객체 생성법] Builder 패턴 + Assert  (0) 2023.01.19
@Valid - 객체 유효성체크  (0) 2023.01.19