본문 바로가기

Tip

[spring] enum타입을 front에서 사용(서버사이드)

RDBMS 기반으로 code 테이블에도 있지만

enum으로 된 상수들은 어떻게 front에서 사용할 수 있을까 고민할 차에 구글신이 내려주셨습니다..

 

출처의 출처입니다.

감사합니다.

출처 : https://www.podo-dev.com/blogs/121

출처 : http://dogfeet.github.io/articles/2008/1220695860.html

 

 

web.xml에 다음 리스너를 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- ENUM Listener 설정 -->
    <listener>
        <listener-class>com.cglee079.coinchatbot.config.listener.EnumContextListener</listener-class>
    </listener>
    <context-param>
        <param-name>enumServletContextConfig</param-name>
        <param-value> 
            <!-- Enums-->
            com.cglee079.coinchatbot.config.id.Coin,
            com.cglee079.coinchatbot.config.id.Lang,
            com.cglee079.coinchatbot.config.id.Market,
            com.cglee079.coinchatbot.config.id.MenuState
        </param-value>
    </context-param>
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package zes.openworks.common.listener;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
 
public class EnumContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        String param = servletContextEvent.getServletContext().getInitParameter("enumServletContextConfig");
        String[] params = param.split(",");
 
        for (String className : params) {
            className = className.trim();
            this.loadEnum(className, servletContextEvent.getServletContext());
        }
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
 
    }
 
    /**
     * Enum 인스턴스를 찾아서 Map<name, Enum<?>> 맵으로 변환하고 ServletContext에 넣습니다.
     *
     * @param className
     */
    @SuppressWarnings({ "unchecked""rawtypes" })
    private void loadEnum(String className, ServletContext context) {
        Map<String, Enum<?>> ret = null;
 
        try {
            Class<Enum> clazz = (Class<Enum>) Class.forName(className);
            Enum[] enums = clazz.getEnumConstants();
 
            ret = new HashMap<String, Enum<?>>(enums.length);
            for (Enum e : enums) {
                ret.put(e.name(), e);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
 
        ret = Collections.unmodifiableMap(ret);
        context.setAttribute(this.getAlias(className), ret);
    }
 
    /**
     * 클래스 alias를 만듭니다.
     *
     * @param className
     * @return
     */
    private String getAlias(String className) {
        String[] token = className.split("\\.");
        String alias = token[token.length - 1].trim();
        return alias;
    }
}
 
cs