В настоящее время я использую Spring для всей своей проверки, но хотел создать пользовательскую аннотацию, чтобы сгруппировать несколько условий в одном поле, проверяя некоторые из них по условию и значениями переменных, т.е. :
public @interface CustomAnno
{
@NotNull
@Length(min = 1, max = 10, applyIf = "condition == 1")
@Length(min = 11, max = 20, applyIf = "condition == 2")
String val();
int condition();
}
Я знаю, что это не синтаксически правильно, но, надеюсь, это поможет понять, что я пытаюсь сделать.
Мой вопрос: возможно ли что-то подобное описанному выше, и сможет ли эта единственная аннотация CustomAnno возвращать ошибки для всех условий, которые не выполняются, вместо того, чтобы просто возвращать один сбой для CustomAnno?
Редактировать. Возможно, я не обязательно буду использовать аннотации Spring для проверки значения. В идеале я использовал бы произвольную логику проверки в ConstraintValidator, которая обрабатывает CustomAnno, который, если мое понимание правильное, будет возвращать true или false только для одной возможной ошибки в вызове isValid. То, что я на самом деле ищу, - это то, что достигает той же функциональности, что и выше, но с аннотациями или пользовательской логикой от валидатора, то есть:
public class CustomAnnoValidator implements ConstraintValidator<CustomAnno,String>
{
@NotNull
String val;
int cond;
String regex;
List<String> errors;
private void err(String msg)
{
errors.add(msg);
}
public void initialize(CustomAnno anno)
{
this.val = anno.val();
this.cond = anno.condition();
this.errors = new ArrayList<String>();
this.regex = "[A-Za-z]+[A-Za-z0-9]+";
}
public boolean isValid(String object, ConstraintValidatorContext constraintContext)
{
if (cond == 1)
{
if (object.length() > 10)
err("Length must be less than 10");
else if (object.length() < 1)
err("Length must be greater than 1");
}
else if (cond == 2)
{
if (object.length() > 21)
err("Length must be less than 21");
else if (object.length() < 10)
err("Length must be greater than 10");
}
if (!val.matches(regex))
err("Must start with an alpha character and consist of only alphanumeric characters.");
// some method to add the error messages, ie => constraintContext.addErrors(errors);
return errors.size() > 0;
}
}
Полагаю, теоретически я мог бы создать пользовательские аннотации для любого из пропущенных отдельных условий, потенциально делая этот вопрос «промывкой», но мне было интересно, возможно ли, чтобы валидатор обрабатывал несколько условий