SpringbootのMessageSourceについて

2021-08-18

こんにちは管理人(@vip___p)です。

今回はJavaのフレームワークのSpringbootについてです。

Springbootの特有の処理でMessageSourceというものがあります。

今回はそちらについて触れていこうと思います。

今回やりたいことはプロパティファイルを参照して

文字列を組み合わせてメッセージの出力を行うことです。

またプロパティファイル内の使用方法で{0}の部分(プレイスホルダ)に

値を代入する方法も可能なので、そちらも合わせて確認行っていきたいと思います。

備忘録です。

strtus2の参照方法については下記を参考にしてください。

struts2のvalidation.xmlとgetTextについて

下記のような方は是非参考にしてください。

  • strutsからSpringのリプレイスを想定している方
  • Springの学習を行いたい方

MessageSourceの使用方法

spring

message.propertiesを参照するので準備します。

message.properties
name=田中
hello={0}さん、こんにちは!

Hello.javaはこんな感じです。

@RestController
public class Hello {

@Autowired
MessageSource messagesource;

public String getValue(String key) {
ResourceBundle resources
= ResourceBundle.getBundle("message.resources");

return resources.getString(key);
}

String value = getValue("name");

@RequestMapping ("/show")
public void showMessage(){
String message = messagesource.getMessage("hello", new String[]{value}, Locale.JAPAN);

}
}

出力結果
田中さんこんにちは!

振り返り

messagesource.getMessage("hello", new String[]{value}, Locale.JAPAN);

第一引数には呼び出したいプロパティの値
第二引数には代入したい値

@Autowiredを忘れて苦労しました。
現在はコントローラーで使用していますが
logicなどで使用する際はインスタンス化するのではなく
@Autowiredを使用することに注意してください。
値が空のエラーが出るときはこの辺りを一度確認してみるのも良いと思います。

ResourceBundleを使用することでプロパティの値を代入することができました。
ResourceBundleを使用せず直接値を代入することは当然可能です。

messagesource.getMessage("hello", new String[]{"山田"}, Locale.JAPAN);

出力結果
山田さんこんにちは!

まとめ

まとめ

MessageSourceについて簡単にまとめました。

@Autowiredも重要なので忘れないように注してください。

簡単に使用することが出来ました。

Spring特有の機能についてあまり触れる機会がありませんが、

また追記して行きたいと思います。

皆さんの参考になれば幸いです。