今回は、MessageSourceを使うときもっと楽に使えるようにMessageHelperを作成してみます。
MessageSourceは?
MessageSourceをそのまま使うときは、以下のような時が発生します。
@Autowired
private MessageSource messageSource;
messageSource.getMessage("VE00008", null, null);
必要ないパラメータにnullを渡していますね。個人的にこれは意図がわかりづらく、あまりみたくないコードです。
そころMessageSourceを楽に使用するためのMessageHelperクラスを作成したいです。
MessageHelper
package com.sample.common.utils;
import lombok.RequiredArgsConstructor;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Component;
import java.util.Locale;
@RequiredArgsConstructor
@Component
public class MessageHelper {
private final MessageSource messageSource;
public String getMessage(String messageCode) {
return this.getMessage(messageCode, null, Locale.getDefault());
}
public String getMessage(String messageCode, Object[] args) {
return this.getMessage(messageCode, args, Locale.getDefault());
}
public String getMessage(String messageCode, Object[] args, Locale locale) {
return messageSource.getMessage(messageCode, args, locale);
}
}
- 自分が作成したMessageHelperとなります。
- @Componentをつけて、スキャンされるように指定します。
- 内部でMessageSourceを利用するため、MessageSourceをDIしました。
- getMessageメソッドはオーバーロードで作成しました。
- メッセージコードのみある場合
- メッセージコードとバインディング文字列がある場合
- ロケールまである場合
これにより呼び出し側では以下のように呼びだすことができます。
@Autowired
private MessageHelper messageHelper;
messageHelper.getMessage("VE00008");
もっと簡潔になりました。
メッセージコードを各画面で文字列としてセットすること嫌な場合は、MessageCodeを管理するEnumや定数管理クラスを作成して管理するのもいいでしょう。
