9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SpringBoot MessageSourceの拡張

Last updated at Posted at 2016-10-16

#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();
    }

}
9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?