본문 바로가기

개발(합니다)/Java&Spring

Spring에서 메세지 처리하기

반응형

공통적으로 사용하는 메세지들이 있습니다.

이러한 메세지를 한 곳에서 정의하고 여러 곳에서 가져다 쓰는 형식으로 설정하여 개발을 하면 편리합니다.




1.message-context.xml

error.BadCredentials=아이디나 비밀번호가 맞지 않습니다. 다시 확인해주세요.
error.Disaled=계정이 비활성화되었습니다. 관리자에게 문의하세요.
error.CredentialsExpired=비밀번호 유효기간이 만료 되었습니다. 관리자에게 문의하세요.
error.Locked=계정이 잠겨있습니다. 관리자에게 문의하세요.
error.AccountExpired=계정이 만료되었습니다. 관리자에게 문의하세요.

message-context.xml을 생성합니다.

{파일명}_ko_KR.properties로 생성합니다.

_ko_KR은 언어별로 구분합니다.

properties 생성 후 파일 인코딩을 UTF-8로 변경해줍니다.


2. web.xml 

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring/appServlet/servlet-context.xml
                /WEB-INF/spring/appServlet/message-context.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

파일 경로를 작성합니다.


3. message-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- Encoding 설정 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- Reload Cache 설정 -->
<property name="cacheSeconds" value="5"/>
<!-- basenames 설정: 아래처럼 하면 WEB-INF 밑의 message 폴더 아래의 labels로 시작하는 모든 Property-->
<property name="basenames">
<list>
<value>/WEB-INF/message/message</value>
</list>
</property>
</bean>
<!-- MessageSource를 사용하기 위한 Accessor 설정 -->
<bean id="messageSourceAccessor"
class="org.springframework.context.support.MessageSourceAccessor">
<constructor-arg ref="messageSource"/>
</bean>
<!-- MessageSource를 사용하기위한 MessageUtils 매핑 -->
<bean id="message" class="com.otrodevym.mfaw.common.MessageUtils">
<property name="messageSourceAccessor" ref="messageSourceAccessor"/>
</bean>
<!-- Default Location 설정 -->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="ko"></property>
</bean>
</beans>


MessageSource의 bean id는 messageSource로 작성합니다.



3. MessageUtils.java

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

public class MessageUtils {
    
    private static MessageSourceAccessor msAcc = null;
public void setMessageSourceAccessor(MessageSourceAccessor msAcc) {
MessageUtils.msAcc = msAcc;
}
public static String getMessage(String code) {

return msAcc.getMessage(code, Locale.getDefault());
//   HttpServletRequest httpRequest =
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// return msAcc.getMessage(code, httpRequest.getLocale());
}
public static String getMessage(String code, Object[] objs) {
return msAcc.getMessage(code, objs, Locale.getDefault());
}
}



4. 테스트

package com.otrodevym.mfaw.message;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import com.otrodevym.mfaw.common.MessageUtils;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations="file:src/main/webapp/WEB-INF/spring/**/**.xml")
public class MessageTest {
    private final Logger logger = LoggerFactory.getLogger(MessageTest.class);
    @Test
    public void messageTest_만들어_놓은_메세지가_잘나오는지_테스트() {
//      logger.debug(MessageUtils.getMessage("error.common"));
        logger.debug("error.BadCredentials: "+MessageUtils.getMessage("error.BadCredentials"));
        logger.error("error.BadCredentials: "+MessageUtils.getMessage("error.BadCredentials"));
    }
}





반응형