No message found under code for locale 'ja_JP'.

メッセージプロパティを設定したときのエラー

1.起きたエラー

There was an unexpected error (type=Internal Server Error, status=500).
No message found under code 'male' for locale 'ja'.

2.なにした?

画面上に表示するための固定文言をプロパティファイルで管理したいので、 src/main/resources/配下に「messages.propeties」ファイルを作成し、 任意のキーバリューを記述した。

■messages.properties

male=男性
female=女性

結果、前述のエラーが出力された。

3.解決方法

2点修正をおこなった。
①対象のmessages.propertiesをリネーム

 前)messages.properties
 後)messages_ja.properties

②application.propetiesに設定を追記した。
以下「messages_ja」の部分は、設定を記述しているmessages_ja.propertiesと同名にする必要がある(拡張子は含まない)※1

■application.propeties

#MessageSourceの設定
spring.messages.basename=messages_ja

4.解決までの過程

まず、エラー結果を検索にかけて、あれこれ調べたが よりよい結果は得られず、そもそもの設定方法を疑ってみた。 すると、以下がヒットした。

記載のとおりに、message.propertiesにファイル名を記述して エラー解消ができた。

5.学び

  • エラー結果とともに、そもそもの設定方法を疑う
    (目的に対しての不足はないか。今回はそれがあった。)
  • リファレンスでも検索してみる(そのためにも要件を整理する)

おまけ

① 今回のエラーで解決しない場合
メソッドの呼び出し方が悪いかもしれない
参考:メッセージソースに「_ja」を含めると読めない

②spring.messages.basenameには複数列記できる。
以下のように~basenameのバリューには、複数のファイルを指定できる。
のちの多言語化するさいにバリデーションファイルも列記できる。
(記述の「i18n/」は今回の要件とは別なので無視してください)

■application.propeties

#MessageSourceの設定
spring.messages.basename=i18n/messages,i18n/ValidationMessages

参考

メッセージの外出し(Spring boot)(※1)
SpringBoot公式リファレンス
後悔しないためのSpring Boot 入門書(※2)
メッセージソースに「_ja」を含めると読めない