MessageSource使い方

今回は、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や定数管理クラスを作成して管理するのもいいでしょう。

コメントを残す