Я хочу, чтобы ограничения на поля класса были упорядочены и были закорочены, например,
@Size(min = 2, max = 10, message = "Name length improper")
@Pattern(regexp = "T.*", message = "Name doesn't start with T")
private String name;
с name="S"
должно выйти из ограничения @Size
и, следовательно, даже не беспокоиться о проверке следующего. Я прошел Группы, GroupSequence
и Составные ограничения, но, похоже, ничего не помогло. В частности, GroupSequence
не будет работать для моего случая. Учтите это:
public class Bean {
public interface First{}
public interface Second {}
@GroupSequence({First.class, Second.class})
public interface Sequence {}
public Bean(String name, int noOfDependants) {
...
}
@Size(min = 2, max = 10, groups = {First.class})
@Pattern(regexp = "T.*", groups = {Second.class})
private String name;
@Min(value = 0, groups = {First.class})
@Max(value = 4, groups = {Second.class})
private int noOfDependants;
}
validator.validate(new Bean("S", 5), Sequence.class)
Я ожидаю, что первое ограничение на name
и второе ограничение на noOfDependants
потерпит неудачу. Но, как работает GroupSequence, группа First.class потерпит неудачу, а Second.class даже не будет выполнен.
Наконец, я решил написать собственное ограничение следующим образом:
@LazySequence({
@Size(min = 2, max = 10, message = "Name length improper"),
@Pattern(regexp = "T.*", message = "Name doesn't start with T")
})
private String name;
и нажмите знакомую проблему Элемент аннотации, который содержит другие аннотации?
public @interface LazySequence {
???[] values();
String message() default "";
...
}
Кто-нибудь сталкивался с этим вариантом использования?
Thx