アレについて記す

Spring Boot(MVC)でvalidationのエラーメッセージを日本語化する

Posted on January 31, 2015 at 23:32 (JST)

Spring Boot(MVC)でエラーメッセージをカスタマイズする方法を記載します。

作成したサンプルはGithubにて公開しています。[ simple-mvc-app ]

今回は下記の構成となるよう、ファイルを新規に作成しました。
構成
MessageConfig: validationでエラーになった場合に使用するファイルの指定などを行います
messages_ja.properties: 表示したい(日本語化した)メッセージを記載します
messages.properties: ロケールが指定されていない場合、または指定されたロケールが存在しない場合に参照されるファイルです。(無くても大丈夫です)
※ Resource Bundle 'messages' はディレクトリではなく、IDEAが勝手に表示しているだけの情報です。

ファイル作成

まずはMessageConfigファイルから。
ファイル名は任意のもので大丈夫です。

[ MessageConfig.java ]

@Configuration
/* !! ※2015/2/2訂正 webjars:bootstrapが効かなくなるので除去 !! 
@EnableWebMvc  //(※1)
*/
public class MessageConfig extends WebMvcConfigurerAdapter {  //(※1)

    @Bean
    ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasenames("classpath:i18n/messages"); //(※2)
        messageSource.setCacheSeconds(0);
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

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

    @Override
    public Validator getValidator() {  //(※3)
        return validator();
    }
}

※1、3: MVCで任意のファイルを読み込ませるために必要な設定です。
※2: カンマ区切りで複数ファイルを指定可能です。

続いて、メッセージプロパティファイルを見ます。

[ messages_ja.properties ]

javax.validation.constraints.NotNull.message = 入力必須項目です
javax.validation.constraints.Size.message = {min}〜{max}文字で入力してください
org.hibernate.validator.constraints.Email.message = アドレスの形式が不正です
org.hibernate.validator.constraints.NotBlank.message = 入力必須項目です

アプリケーションで使用するものだけ記載すればOKです。
validationにて使用するプロパティのkeyを変更する方法はありますが、めんどいのでデフォルトのままです。
ここに記載していないものについては、同フォルダに用意したmessages.properties、もしくはライブラリ(jar)内に用意されているデフォルト値が使用されます。
なお、hibernate-validatorのデフォルトメッセージファイルはGithubにて参照出来ます。

以上です。