BeanValidationとの連携
BeanValidationのメッセージフォーマット処理を本ライブラリに切り替える方法を説明します。
- EL式が使いづらい。
- BeanValidation のEL式の実装は、JSPのEL式を利用していますが、カスタム関数の登録にTLD形式で登録する必要があるなど面倒.。
- パラメータの埋め込みやEL式の埋め込むための
${,{,}のプレースホルダーの処理に問題があり、エスケープ処理できない。 - メッセージ中に文字として、
${を出力したい場合、正しく解釈されないケースがある。
BeanValidationのメッセージ処理の切り替え方法
BeanValidationの MessageInterplator の実装 CustomMessageInterpolator を使用します。
本ライブラリの MessageInterpolator と BeanValidationのクラス名が同じなので注意してください。
@Configuration
public class ValidationConfig {
// メッセージソース
@Bean
public MessageSource messageSource() {
final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.addBasenames("test_messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setUseCodeAsDefaultMessage(false);
messageSource.setFallbackToSystemLocale(false);
return messageSource;
}
@Description("Validator of BeanValidation")
@Bean
public LocalValidatorFactoryBean validator() {
// BeanValidationにブリッジするCustomMessageInterpolatorの作成
CustomMessageInterpolator messageInterpolator = new CustomMessageInterpolator(
messageSource(),
new MessageInterpolator(new SpelExpressionEvaluator()));
// BeanValidationのファクトリクラス
final LocalValidatorFactoryBean factory = new LocalValidatorFactoryBean();
factory.setMessageInterpolator(messageInterpolator);
return factory;
}
