2017-06-06 21 views
2

多言語エラーメッセージをサポートするために、既存のSpringブートアプリケーションを変更しようとしています。ロケール固有のエラーメッセージ内の補間

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

マイmessages_en.propertiesは、次のようになります:

Book.name.Size =名前は{}分との間でなければなりません{最大}文字

を次のように私は、プロパティに注釈を変更しました

次のように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場合LUEは、ユーザが正確に見えるように、返されたエラーメッセージが補間最小/最大値が含まれていない大/それが小さ過ぎる入力されます。

名は{分}と{最大}文字

間でなければなりません。

私は、中括弧を含めるようにプロパティに注釈を変更してみました:

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

しかし、今、私が代わりにエラーが表示されます。

org.springframework.context.NoSuchMessageException:

(EN)コードの下では見つかりませんメッセージのロケールは「名前は2〜75文字の間でなければなりませんが、」それは、構成に問題があってはなりませんが、私はしないでください...どこに問題がある

+0

'{分}'と '{最大}' '使用{0}'と '{ 1} '。 –

+0

私はこれを試しましたが、レスポンスは '{0}から{1}文字の間でなければなりません –

答えて

0

を知っているあなたは、次のように追加する必要があり、あなたのGreetingController

代わりの
@Autowired 
private LocalValidatorFactoryBean validator; 

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator(validator); 
} 
関連する問題