1. Spring 은 기본적으로 메시지 관리기능을 제공한다.
메시지 관리 기능을 사용하려면 스프링이 제공하는
(일반스프링사용)
"MessageSources" 를 스프링 빈으로 등록 해야하고
"MessageSources" 는 인터페이스이고 구현체인 "ResourceBundleMessageSources" 를 빈으로 등록하면된다.
(스프링부트 사용시)
MessageSources 등록안해도 자동으로 적용
1. 직접구현 할때만 APPICATION 필요 ( 스프링부트가 지원해줌 )
@Bean
public MessageSource messageSource(){
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("resources-message.propertiece","resources-error.propertiece");
messageSource.setDefaultEncoding("Utf-8");
return messageSource;
}
2.스프링 부트가 자동적으로 지원해줌
스프링 부트를 사용하면 스프링부트가
자동으로 "MessageSources" 를 스프링 빈으로(@Bean) 으로 등록한다
"appication.properties" 스프링부트 메시지 소스설정
spring.messages.basename=messages,config.i18n.messages
ex ) config.i18n.messages == resourecs.config.i18m.messages
라는 경로파일 이름이다.
"appication.properties" 스프링부트 메시지 소스설정 ( default 값")
spring.messages.basename=messages
"appication.properties" 스프링부트 메시지 소스설정 ( 주석처리해도 기본값 적용")
#spring.messages.basename=messages
아래내용은 Spring 홈페이지에 가서 자동으로 스프링 빈 등록되는 걸 참고하는 사이트
Common Application Properties (spring.io)
"message" 를 스프링 빈으로 등록하지않고
관련된 별도의 설정을 하지않으면
default 값인 "messages" 이름으로 기본 등록된다
중요
ex ) "messages_korea.properties" ,
"message_english.properties"
파일만 등록하면 자동으로 인식된다
"messages.properties" 와 "message_en.properties" 를 만들어볼게요
messages.properties 내용
messages_en.properties 내용
프로퍼티 파일까지 다 만들었으면 test 파일에서 테스트를 해볼게요
test.message.MesaageSourecesTest
package hello.itemservice.message;
import org.assertj.core.api.Assertions;
import org.assertj.core.api.AssertionsForClassTypes;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.MessageSource;
@SpringBootTest
public class MessageSourcesTest {
@Autowired
MessageSource messageSource;
@Test
void Message(){
String result = messageSource.getMessage("hello",null,null,null);
AssertionsForClassTypes.assertThat(result).isEqualTo("여기한국서버야");
}
}
실행하게되면 성공 표시가 뜬다
간혹 ?? 표시가 되서 성공 오류가 뜨는데 UTF-8 로 파일 인코딩을 해야함
package hello.itemservice.message;
import org.assertj.core.api.Assertions;
import org.assertj.core.api.AssertionsForClassTypes;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.MessageSource;
import org.springframework.context.NoSuchMessageException;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@SpringBootTest
public class MessageSourcesTest {
@Autowired
MessageSource messageSource;
@Test
void Message(){
String result = messageSource.getMessage("hello",null,null,null);
AssertionsForClassTypes.assertThat(result).isEqualTo("여기한국서버야");
}
@Test
void notFoundMessageCode(){
assertThatThrownBy(() -> messageSource.getMessage("no_code",null,null)) //no_code란게 메시지프로퍼티에없음
.isInstanceOf(NoSuchMessageException.class); //예외처리
}
@Test
void notFoundMessageCodeDefalut(){
String result = messageSource.getMessage("no_code",null,"기본 메시지",null);
assertThat(result).isEqualTo("기본 메시지"); // 메시지를 못찾으면 defalt 메시지 찾음
}
@Test
void argumentMessage(){
String result = messageSource.getMessage("hello.name",new Object[]{"spring"},null);
assertThat(result).isEqualTo("한국 spring"); // 한국 {0} == {0} <= 이부분이 spring 으로 변환
}
@Test
void defaultLang(){
assertThat(messageSource.getMessage("hello",null,null)).isEqualTo("여기한국서버야");
assertThat(messageSource.getMessage("hello",null, Locale.KOREA)).isEqualTo("여기한국서버야");
}
@Test
void enLang(){
assertThat(messageSource.getMessage("hello",null,Locale.ENGLISH)).isEqualTo("hi"); //영어버전
}
}
'기존 > 🏀SpringBoot' 카테고리의 다른 글
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. (0) | 2022.10.31 |
---|---|
[스프링부트] lombok 라이브러리 어노테이션들 (0) | 2022.08.11 |
[스프링부트] -1 세팅하기 pom. (0) | 2022.08.09 |