2017-06-06 61 views
2

我試圖修改現有的Spring Boot應用程序以支持多語言錯誤消息。我已經改變了註釋的屬性,如下所示:特定於語言環境的錯誤消息的插值

@Size(min = 2, max = 75, message = "Book.name.Size") 
private String name; 

messages_en.properties樣子:

Book.name.Size =名稱必須是{}分鐘之間{MAX}字符

的的MessageSource配置如下:

@Configuration 
public class MessageSourceConfig extends WebMvcConfigurerAdapter { 

    @Bean 
    public MessageSource messageSource() { 

     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
     messageSource.setBasename("classpath:messages"); 
     messageSource.setDefaultEncoding("UTF-8"); 
     messageSource.setCacheSeconds(600); 

     return messageSource; 
    } 

    @Bean 
    public LocaleChangeInterceptor localeChangeInterceptor() { 

     LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); 
     localeChangeInterceptor.setParamName("lang"); 

     return localeChangeInterceptor; 
    } 

    @Bean 
    public LocaleResolver localeResolver() { 

     SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver(); 
     sessionLocaleResolver.setDefaultLocale(Locale.ENGLISH); 

     return sessionLocaleResolver; 
    } 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 

     registry.addInterceptor(localeChangeInterceptor()); 
    } 

    @Bean 
    public LocalValidatorFactoryBean validator() 
    { 
     LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); 
     localValidatorFactoryBean.setValidationMessageSource(messageSource()); 

     return localValidatorFactoryBean; 
    } 
} 

如果VA泰倫進入過小/大返回,這樣用戶看到的正是不包含插值最小值/最大值錯誤消息:

名稱必須是{分鐘}之間{MAX}字符

我試圖改變對房地產的註釋,包括大括號:

@Size(min = 2, max = 75, message = "{Book.name.Size}") 
private String name; 

但現在我收到一個錯誤,而不是:

org.springframework.context.NoSuchMessageException:沒有在代碼中發現的消息「這個名字必須在2到75個字符之間」對語言區域「en」

它必須與配置的問題,但我不知道知道問題出在哪裏?

+0

而不是'{}分鐘'和'{MAX}''使用{0}'和'{ 1}'。 –

+0

我試過了,但現在的迴應是'名稱必須在{0}和{1}個字符之間 –

回答

0

你必須添加以下到您GreetingController

@Autowired 
private LocalValidatorFactoryBean validator; 

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator(validator); 
} 
相關問題