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