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; }