46827


お世話になります。

spring boot のメッセージソースを利用するところではまっています。

以下のサイトを参考にサンプルを作りましたが、正しく動きません。  
<https://web-dev.hatenablog.com/entry/spring-boot/intro/message-source>

messages_ja.properties に
「msg1=メッセージ」のように設定して、コントローラクラスから、「msg.getMessage("msg1", null,
Locale.JAPAN);」(msgはメッセージソースのインスタンス)した場合、以下のような例外が発生してしまいます。

org.springframework.context.NoSuchMessageException: No message found under
code 'msg1' for locale 'ja_JP'.

messages_ja.properties を messages.properties に変更すると正しく取得できます。

他に、コントローラでロケールを受け取り、標準出力すると「ja」と表示されることを確認しています。

原因と思われるものは何でしょうか？

よろしくお願い致します。

追記：  
・application.properties の内容は「spring.messages.basename=messages」の一行だけです。  
・Spring boot のバージョンは v2.0.3.RELEASE です。

若干自己解決：  
「messages_ja.properties」のファイルと同じ場所に、空の「messages.properties」ファイルを置いたら、メッセージが取得できるようになりました。不思議。


CC BY-SA 4.0
2018-07-22T03:23:47.713
46822
2018-07-22T13:20:39.360
2018-07-22T07:17:58.630
29408
29408
question
java spring-boot
メッセージソースに「_ja」を含めると読めない


Locale.JAPANで対応するプロパティは  
messages_ja_JP.properties  
となります。

Locale.JAPANESE は  
messages_ja.properties  
です。  
なので、今のファイル名のまま使うためにはJAPANESE の方を使ってください。

また、_ja を省略するとデフォルトとして使われるため、取得可能になったはずです。

追記  
springでAutoConfigureにてBeanを注入した場合、デフォルトのプロパティがないとだめなようです。  
messages.propertiesがない場合はDelegatingMessageSource,message.properiesがある場合はResourceBundleMessageSourceがBeanとして注入されます。

もしmessages.propertiesを使いたくない場合は自分で注入するためのBeanを設定したほうが良さそうです。


CC BY-SA 4.0
2018-07-22T06:28:23.903
46827
2018-07-22T13:20:39.360
2018-07-22T13:20:39.360
24823
24823
46822
answer