Java
spring-boot

SpringBootでValidationMessages.propertiesをUTF8にしたい私の覚書

はじめに

  • Spring Boot 1.5.10
  • 日本語のみ扱うアプリを前提
  • 色々てさぐり

SpringBootでバリデーションをするとデフォルトのエラーメッセージは英語です。
image.png

めいのっとびーえんぷてぃ。ぺらぺーら。

日本人向けアプリを作っているので日本語にしたいです。
日本語化自体は、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だとエディタでは読めますが、画面表示すると日本語部分がこんな感じで文字化けします。
image.png

追記 バージョンによる違いについて

下記、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を設定すれば動作しました!

教えて頂いたみなさんありがとうございます:bow_tone1:

やったこと

WebMvcConfigurerAdapterのgetValidatorをOverrideしたげる。だけでした。

WebMvcConfig.java

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

ValidationMessages.properties
org.hibernate.validator.constraints.NotEmpty.message=入力してください。

読める。読めるぞ。

結果

image.png

ひゃっほーい :relaxed:

参考

Spring Framework Documentation

おわり