ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
スポンサーリンク
目次
独自プロパティファイルをソースから読み込みたい
SpringBootではエラーメッセージなどをプロパティファイルなどに外出しして管理することが可能になります。
呼び出すためには専用の設定を行う必要があるため、今回はその方法についてご紹介していきます。
手順
message.propertiesの用意
まずは読み込ませたいプロパティファイルを用意しましょう。
1 |
hoge=fuga |
メッセージファイルの読み込み設定
次に、上記で作成したプロパティファイルを読み取れるようにするための設定クラスを用意しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package tech.blogenist.service.account.api.infrastructure.message; import java.nio.charset.StandardCharsets; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.MessageSourceAccessor; import org.springframework.context.support.ResourceBundleMessageSource; @Configuration public class MessageSourceBean { private String[] BASE_NAMES = { "custom/message" }; @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasenames( BASE_NAMES ); messageSource.setDefaultEncoding( StandardCharsets.UTF_8.name() ); return messageSource; } @Bean public MessageSourceAccessor messageSourceAccessor() { return new MessageSourceAccessor( messageSource() ); } } |
確認
では、実際に以下のように読み出した値を標準出力に出してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
@Autowired private MessageSource messageSource;// 準備 ... String value = messageSource .getMessage( "hoge", //Keyを指定 null, // とりあえずnullで良い Locale.getDefault() );// Localもとりあえずはデフォルトで良い System.out.println( value ); // fuga |
では、これで実際にリクエストを投げてみましょう。
1 2 3 4 |
2019-04-27 10:42:02.075 INFO 4380 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2019-04-27 10:42:02.076 INFO 4380 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2019-04-27 10:42:02.096 INFO 4380 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 20 ms fuga |
正しく取得出来ましたね♪
他言語化対応
プロパティファイル名に{ファイル名}_{言語コード}
とすることでLocale
に合わせたファイルを自動で読み込んでくれるようになります。
以下のようなファイルを用意したとしましょう。
1 2 3 4 |
api/src/main/resources/custom ├── message.properties ├── message.properties └── message.properties |
その上で、メッセージを取得する際の第三引数にLocaleを指定することで対応したプロパティファイルから値を取ってきてくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
... String jaValue = messageSource .getMessage( "hoge", null, Locale.JAPANESE ); System.out.println( jaValue );// ふが String enValue = messageSource .getMessage( "hoge", null, Locale.ENGLISH ); System.out.println( enValue );//fuga String zhValue = messageSource .getMessage( "hoge", null, Locale.CHINA );// ふが System.out.println( zhValue ); |
上記の例で、中国語用のファイルを用意してないのに日本語用のプロパティが読まれるのは、おそらくシステムのデフォルト言語が日本語になっているため、存在しない場合はそちらが適用されるからだと思います。
なので、_ja
のプロパティファイルを削除すると、無印のデフォルトのプロパティが呼び出されました。
オススメの商品
終わりに
以上のように、SpringBootで簡単に独自エラーメッセージを読み込むことが出来ました。
エラーメッセージなどもプロパティファイルに出して管理することで、保守や他言語化なども可能になるのでぜひ試してみてください♪