SpELを使用したMessageInterpolator
BeanValidation1.1(JSR-349)から、メッセージ中にEL式が利用できるようになしました。
これを見てたら、普通のメッセージ中にもEL式が利用したくなりました。
Springは「MessageSource」がありますが引数は配列で、メッセージ中の項目はインデックス形式です。
名前形式でフォーマットしたい場合は、Commons-Langの「StrSubstitutor」などがあります。
思えば、Springには、SpELというEL式がSpring3から追加されいるため、これは使えるんじゃないかと思い、自作してみました。
Gistに追加しました。
特殊文字の二重定義の場合がうまくいきませんが。
https://gist.github.com/tatsu-no-otoshigo/0adf89df73c36d47fc19
/* * MessageInterporlator の仕様 * ・名前付きの変数は、{name1}で定義。 * ・SpEL式を使う場合は、${EL式}(例. ${#formatter.format('%1.1f',#validatedValue)})で定義。 * */ MessageInterporlator interpolator = new MessageInterporlator(); String message = "${#formatter.format('%1.1f',#validatedValue)}は、{min}〜{max}の範囲で入力してください。"; double validatedValue = 3; Map<String, Object> vars = new HashMap<>(); vars.put("validatedValue", validatedValue); vars.put("min", 1); vars.put("max", 10); String actual = interpolator.interpolate(message, vars); assertEquals("3.0は、1〜10の範囲で入力してください。", actual);