Хороший вопрос.Спецификация JSR 303 Bean Validation описывает процедуру проверки в разделе 3.5.
Для проверки заданной группы процедура проверки, примененная к данному экземпляру компонента, должна выполнитьследующие проверки ограничений в произвольном порядке:
- для всех достижимых полей, выполнить все проверки уровня поля (включая те, которые выражены в суперклассах), соответствующие целевой группе, если только данное ограничение проверки не было обработано в течение этого периода.подпрограмма проверки для заданного пути навигации (см. раздел 3.5.1) как часть предыдущего совпадения групп.
...
Подпрограмма проверки объекта описывается как таковая.Для каждого объявления ограничения:
- определяет для объявления ограничения соответствующий ConstraintValidator для использования (см. Раздел 3.5.3).
- выполняет операцию isValid (из реализации проверки ограничения)на соответствующих данных (см. раздел 2.4)
- , если isValid возвращает true, переходите к следующему ограничению,
- , если isValid возвращает false, поставщик проверки бинов заполняет объект (ы) ConstraintViolation в соответствии справила, определенные в разделе 2.4, и добавляет эти объекты в список нарушений ограничений.
В вашем случае вы имеете дело с проверкой простого поля String
, где целевая группа Default
.У вас есть два ограничения проверки (@AlphanumericString и @Size), которые в соответствии с документацией будут проверяться / обрабатываться отдельно в произвольном порядке.
Итак, чтобы ответить на ваш вопрос.Нет, к вашему @AlphanumericString
не будет применено переопределение, когда вы дополнительно используете @Size
.Чтобы достичь того, что, как я думаю, вы пытаетесь сделать, вы можете создать композицию ограничений , где вы переопределяете атрибуты, создавая аннотации следующим образом:
@Pattern(regexp="[a-zA-Z]*")
@Size
@Constraint(validatedBy = AlphanumericStringValidator.class)
@Documented
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface AlphanumericString {
// ...
@OverridesAttribute(constraint=Size.class, name="min")
int min() default 3
@OverridesAttribute(constraint=Size.class, name="max")
int max() default 230;
// ...
}
и используйте его следующим образом:
@AlphanumericString(min = 100, max = 150)