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 |