はじめに
- Spring Boot 1.5.10
- 日本語のみ扱うアプリを前提
- 色々てさぐり
SpringBootでバリデーションをするとデフォルトのエラーメッセージは英語です。
めいのっとびーえんぷてぃ。ぺらぺーら。
日本人向けアプリを作っているので日本語にしたいです。
日本語化自体は、ValidationMessages.properties というファイルを作って、エラーメッセージを定義すれば可能ですがpropertiesファイルはUnicode変換が必要なため、生で見ると読めません。
org.hibernate.validator.constraints.NotEmpty.message = \u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
IDE固有のプラグインで対応する方法もありますが、今回はSpringBoot側でUTF8を受け付けるようにする方法を試してみました。
ちなみに、UTF8で書かれたValidationMessages.propertiesだとエディタでは読めますが、画面表示すると日本語部分がこんな感じで文字化けします。
追記 バージョンによる違いについて
下記、SpringBootのバージョンによる違いについてコメントをいただいたので捕捉します!
Spring Boot 2.1
Spring Boot 2.1では、特に何もせずともUTF-8化できました。
JDKのバージョンは 11 にする必要があります。
Spring Boot 1.5.3
Spring Boot 1.5.3で試したのですが、public Validator getValidator()をoverrideする方法だとエラーになるみたいです。(エラー内容は参考URLで表示されているものと同じ)
代わりにmvcValidatorのBeanを設定すれば動作しました!
教えて頂いたみなさんありがとうございます
やったこと
WebMvcConfigurerAdapterのgetValidatorをOverrideしたげる。だけでした。
WebMvcConfig.java
public class WebMvcConfig extends WebMvcConfigurerAdapter {
/* ・・・ 関係ない設定は省略 ・・・ */
/**
* ValidationメッセージをUTF-8で設定できるようにする
*/
@Override
public Validator getValidator() {
return validator();
}
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setValidationMessageSource(messageSource());
return validator;
}
private MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
//プロパティファイルの名前やディレクトリも変更可能
messageSource.setBasename("classpath:/ValidationMessages");
//UTF-8に設定
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
}
ValidationMessages.properties
org.hibernate.validator.constraints.NotEmpty.message=入力してください。
読める。読めるぞ。
結果
ひゃっほーい
参考
Spring Framework Documentation
おわり