エラー メッセージが示すように、注釈値に式を含めることはできないため、カスタム検証注釈を使用する必要があります。
これを行うのは比較的簡単です:
注釈
@Constraint(validatedBy = AgeConstraintValidator.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface MaxAge {
/**
* The age against which to validate.
*/
int value();
String message() default "com.mycompany.validation.MaxAge.message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
制約バリデーター
public class AgeConstraintValidator implements ConstraintValidator<MaxAge, Integer> {
private int maximumAge;
@Override
public void initialize(MaxAge constraintAnnotation) {
this.maximumAge = constraintAnnotation.value();
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
return value.intValue() <= this.maximumAge;
}
}
次に、フィールドに注釈を付けるだけ@MaxAge(50)
で機能するはずです。