All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sam.server.util.Converter Maven / Gradle / Ivy

package org.sam.server.util;

import com.google.gson.Gson;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 요청 파라미터나 JSON을 인스턴슫로 변환하는 클래스입니다.
 *
 * @author hypernova1
 */
public class Converter {

    private static final Gson gson = new Gson();

    /**
     * 파라미터를 받아 인스턴스에 값을 넣어주고 인스턴스를 반환합니다.
     *
     * @param parameters 요청 파라미터
     * @param type 핸들러의 파라미터 타입
     * @return 파라미턴 인스턴스
     * */
    public static Object parameterToObject(Map parameters, Class type) {
        Object instance = null;
        try {
            instance = type.getDeclaredConstructor().newInstance();
            List setters = getSetters(type);
            for (Method setter : setters) {
                invokeSetter(parameters, instance, setter);
            }
        } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
            e.printStackTrace();
        }
        return instance;
    }

    /**
     * 클래스의 Setter 목록을 가져옵니다.
     *
     * @param clazz 클래스
     * @return Setter 목록
     * */
    private static List getSetters(Class clazz) {
        return Arrays.stream(clazz.getMethods())
                .filter(m -> m.getName().startsWith("set"))
                .collect(Collectors.toList());
    }

    /**
     * JSON을 인스턴스로 바꾸고 반환합니다.
     *
     * @param  핸들러 파라미터의 클래스 타입
     * @param json 요청 JSON
     * @param type 핸들러 파라미터 클래스
     * @return 파라미터 인스턴스
     * */
    public static  T jsonToObject(String json, Class type) {
        return gson.fromJson(json, type);
    }

    /**
     * Setter 메서드를 실행 시킵니다.
     *
     * @param parameters Setter의 파라미터
     * @param instance 실행할 인스턴스
     * @param method Setter 메서드
     * */
    private static void invokeSetter(Map parameters, Object instance, Method method) {
        String propertyName = method.getName().replace("set", "");
        propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1);
        String parameter = parameters.get(propertyName);
        try {
            method.invoke(instance, parameter);
        } catch (IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    /**
     * 인스턴를 JSON으로 변환합니다.
     *
     * @param object 인스턴스
     * @return JSON
     * */
    public static String objectToJson(Object object) {
        return gson.toJson(object);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy