JavaEEに暗いので考えが足りてない点があるかと思いますがご容赦ください。
ご存知の通りアノテーションのパラメーターはプリミティブやStringやクラスやそれらの配列等の定数でなければなりませんが、
@javax.validation.constraints.Size
@javax.validation.constraints.Min
@javax.validation.constraints.Max
はパラメーター(min, max, value)に与えた定数が上限・下限の値を表すため、お望みのことに直接使えないということで今回のご質問になったのだと思います。
最適な解がどうなのかわかりませんが、一つの方法としてはカスタムバリデータを定義する方法が考えられると思いました。例えばmaxの値を直接アノテーションに指定するのではなくmaxの値を決めるコンフィギュレーションのキーで与えるとすると、(かなり端折った大雑把な例ですが)以下のような雰囲気のものになると思います。
java
1@Target(FIELD)
2@Retention(RUNTIME)
3@Documented
4@Constraint(validatedBy = {MaxByConfigValidator.class})
5@interface MaxByConfig {
6 @NotNull
7 String value();
8 ...
9}
10
11class MaxByConfigValidator implements ConstraintValidator<MaxByConfig, String> {
12 int max;
13
14 @Override
15 public void initialize(MaxByConfig maxByConfig) {
16 max = config.getIntValue(maxByConfig.value());
17 }
18
19 @Override
20 public boolean isValid(String v, ConstraintValidatorContext context) {
21 return v == null || v.length() <= max;
22 }
23}
24...
25
26class Foo {
27 @NotNull
28 @MaxByConfig("InputMaxLength")
29 String name;
30}
カスタムバリデーションのきちんとした定義方法については解説記事が結構みつかりますのでそれらが参考になると思いました。例えば
(1)http://enterprisegeeks.hatenablog.com/entry/2016/02/15/072944
(2)https://qiita.com/opengl-8080/items/3926fbde5469c0b330c2
... etc.
(1)(2)ともにBeanValidation全般の解説ですが一部にカスタムバリデータの定義例が解説されてます。定義するとなると一通りBeanValidatorの仕組みを把握しなければならないので少々面倒そうです。
こうした機能を持つValidatorが特定のフレームワークに用意されているということもありそうに思えましたが悲しいかなWebアプリ自体に暗い自分にはわかりませんでした。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。