2017-04-27 8 views
9

나는 스프링의 MessageSource을 사용하여 classpath에있는 .properties 파일의 오류 메시지를로드합니다. 나의 특성은 {Object}.{field}.{unrespectedConstraint} 예와 같은 특정 "템플릿을"존중 :스프링 부트 yml ResourceBundle 파일

userRegistrationDto.password.Size= Le mot de passe doit avoir au minimum 6 caractères. 
userRegistrationDto.email.ValidEmail= Merci de saisir une addresse mail valide. 

는 리팩토링의 경우 (예를 들어, 개체의 이름을 변경), 내 특성이 여러 곳에서 파일을 변경해야합니다.

userRegistrationDto: 
    password: 
    Size: Le mot de passe doit avoir au minimum 6 caractères. 
    email: 
    ValidEmail: Merci de saisir une addresse mail valide. 
+1

음, 저기에 (면책 조항 : 직접 테스트하지 않았 음) : https://github.com/akihyro/yaml-resource-bundle – vtosh

답변

1

내가 @vtosh으로 내 앞에 발견 된 발견 할 수있는 가장 좋은 해결책은 : 사용하는

같은 것을 얻을 수있는 ResourceBundle의 같은 YAML 파일 (messages.yml)를 사용하는 방법은 없나요 this library. 유일한 문제 (그러나 여전히)는 충분히 인기가 없다는 것입니다.

다른 옵션은 수동으로 ResourceBundle.Control 클래스를 확장하여 Java 지역화 지원을 확장 할 수 있습니다 (공식 예제 here 참조). 발견 된 라이브러리가이 방법을 사용하기 때문에 나는 그다지 이해할 수 없다.

왜 봄용 솔루션이 없습니까? 음, 대답은 this jira에서 찾을 수 있습니다. 아직 Open 상태이기 때문에 나는 적어도 현재로서는 그들의 입장에서 어떤 해결책도 기대하지 않습니다.

1

난 당신이 VM을 작업하는 동안 다시로드 할 수있는 MessageSource가 필요하면, 당신은 좀 더 파고해야 할 수도 귀하의 요구 사항에 충분하다고 생각합니다.

@Configuration 
public class TestConfig { 

    @Bean(name = "testProperties") 
    public Properties yamlProperties() throws IOException { 
     YamlPropertiesFactoryBean bean = new YamlPropertiesFactoryBean(); 
     bean.setResources(new ClassPathResource("test.yml")); 
     return bean.getObject(); 
    } 

    @Bean 
    public MessageSource messageSource() throws IOException { 
     ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); 
     messageSource.setCommonMessages(yamlProperties()); 
     return messageSource; 
    } 
}