Можно ли возвращать несколько / переменных сообщений об ошибках с помощью одной (предпочтительно Spring-ориентированной) пользовательской аннотации? - PullRequest
0 голосов
/ 03 июня 2011

В настоящее время я использую 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;
    }
}

Полагаю, теоретически я мог бы создать пользовательские аннотации для любого из пропущенных отдельных условий, потенциально делая этот вопрос «промывкой», но мне было интересно, возможно ли, чтобы валидатор обрабатывал несколько условий

1 Ответ

0 голосов
/ 03 июня 2011

Я не уверен, что вы подразумеваете под весенними аннотациями? Spring MVC предназначен для работы с JSR-303, что и описывают эти javax.validation jar-файлы.

Проверка Spring MVC должна возвращать сообщения об ошибках для каждой неудачной проверки, даже если эти проверки сгруппированы в одну пользовательскую аннотацию.

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/validation.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...