SpringBoot MessageSourceの拡張
MessageSourceが使いにくいのでMessageSourceを拡張して使いやすくしてみる。
(お手軽に拡張するならMessageSourceAccsessorを使うと良い)
MessageSourceを拡張することで、引数にEnumを指定したりメッセージの取得先をDBに変更したりと色々と好き放題出来るようになります。
MessageSourceをそのまま使った場合
MessageSourceは引数が多く、しかもLocale.getDefaultの構文の書き方も覚えておく必要があって面倒。
TestController.java
@Controller
public class TestController {
    // @Autowired
    MessageSource message;
    @RequestMapping("/xxx")
    public String init() {
        String msg = message.getMessage("info001", null, Locale.getDefault());
        System.out.println(msg);
        return "/yyy";
    }
}
MessageSourceを拡張した場合
拡張したMessageSourceを使用することで、
引数が1つだけになってコーディングがかなり楽になる。
TestController.java
@Controller
public class TestController {
    // @Autowired
    MessageSourceImpl message;
//    MessageSource message;
    @RequestMapping("/xxx")
    public String init() {
        String msg = message.getMessage("info001");
//        String msg = message.getMessage("info001", null, Locale.getDefault());
        System.out.println(msg);
        return "/yyy";
    }
}
MessageSourceを拡張方法
MessageSourceの拡張クラスを作成してBean登録する。
MessageSourceImpl.java
/**
 * MessageSource拡張クラス
 */
public class MessageSourceImpl implements MessageSource {
    /** MessageSource */
    private MessageSource message = new MessageSourceAutoConfiguration().messageSource();
    /**
     * メッセージの取得
     * @param code
     * @return
     */
    public String getMessage(String code) {
        return message.getMessage(code, null, Locale.getDefault());
    }
    /**
     * メッセージの取得
     * @param code
     * @param args
     * @return
     */
    public String getMessage(String code,
                             Object[] args) {
        return message.getMessage(code, args, Locale.getDefault());
    }
    @Override
    public String getMessage(String code,
                             Object[] args,
                             String defaultMessage,
                             Locale locale) {
        return message.getMessage(code, args, defaultMessage, locale);
    }
    @Override
    public String getMessage(String code,
                             Object[] args,
                             Locale locale) throws NoSuchMessageException {
        return message.getMessage(code, args, locale);
    }
    @Override
    public String getMessage(MessageSourceResolvable resolvable,
                             Locale locale) throws NoSuchMessageException {
        return message.getMessage(resolvable, locale);
    }
}
AppConfig.java
@Configuration
public class AppConfig {
    /**
     * MessageSourceの拡張クラスのBean登録
     * @return
     */
    @Bean
    public MessageSourceImpl messageSourceImpl() {
        return new MessageSourceImpl();
    }
}