Если я использую две пользовательские аннотации в jsr 303, как прекратить валидацию для второй аннотации, если валидация не удалась первой? - PullRequest
6 голосов
/ 02 марта 2012

У меня следующая проблема при работе с jsr303:

поле помечено следующим образом:

@NotEmpty(message = "Please specify your post code")
@PostCode(message = "Your post code is incorrect")
private String postCode;

Но мне нужно проверять @PostCode, только если поле прошло проверку для @NotEmpty. Как я могу проверить эти две аннотации? Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Вы можете использовать группы проверки для выполнения проверок по группам.Подробнее см. Раздел 3.4.Групповая и групповая последовательность в JSR-303 .В вашем примере вы должны сделать что-то вроде:

@NotEmpty(message = "Please specify your post code")
@PostCode(message = "Your post code is incorrect", groups = Extended.class)
private String postCode;

И при проверке вы вызовете проверку для группы по умолчанию, а затем, если ошибок не будет, для группы Extended.

Validator validator = factory.getValidator();

Set<ConstraintViolation<MyClass>> constraintViolations = validator.validate(myClass, Default.class);

if (constraintViolations.isEmpty()) {
    constraintViolations = validator.validate(myClass, Extended.class);
}

Вы можете сделать гораздо больше, используя группы проверки.

В качестве альтернативы можно сделать все проверки (если вы можете себе это позволить), а затем вручную отфильтровать несколько ошибок проверки для одного и того же поля.

1 голос
/ 05 марта 2012

Итак, после долгих исследований я обнаружил одну вещь:

если вы используете разные валидаторы, вы должны убедиться, что они не проверяют одно и то же правило. Например, если я пишу @PostCode, я должен быть уверен, что для этой аннотации допустимо пустое значение. В этом случае я получу сообщение, которое я ожидал. Так что валидатор должен проверять только маленький кусочек логики? другие значения должны быть действительными ...

Если вы не можете предотвратить это, лучший способ - использовать группы для некоторых беспорядочных ситуаций.

Надеюсь, это кому-нибудь поможет ...

...