Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

  • 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

おわり

yukina-ge
基本Javaの案件ばかりやってます。 今はお仕事でAWSをつかった動画配信コンテンツを作っています。
genuine
確かな技術力と誠実な人間力、ユーザー目線の業務スキルで本当に必要とされるシステムを構築する会社です。
https://genuine-pt.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした