#java #hibernate #validation #bean-validation
#java #переход в спящий режим #проверка #проверка компонента
Вопрос:
Я пытаюсь использовать проверку спящего режима для проверки размера списка. в общем, я хочу, чтобы список был пустым, если только он не является объектом типа B
. похоже, это не работает:
public static class A
{
private List<Integer> inheritedRemoveAnnotation = new ArrayList<Integer>();
@Size(max=0)
public List<Integer> getInheritedRemoveAnnotation()
{
return inheritedRemoveAnnotation;
}
}
public static class B extends A
{
@Override
@Size(max=Integer.MAX_VALUE)
public List<Integer> getInheritedRemoveAnnotation()
{
return super.getInheritedRemoveAnnotation();
}
}
private static Validator m_validator = Validation.buildDefaultValidatorFactory().getValidator();
public static void main(String[] args)
{
B b = new B();
b.getInheritedRemoveAnnotation().add(1);
System.out.println(m_validator.validate(b));
}
Результат, который я получаю,:
[ConstraintViolationImpl{interpolatedMessage='size must be between 0 and 0', propertyPath=inheritedRemoveAnnotation, rootBeanClass=class oshai.hibernatevalidators.TestInheritence$B, messageTemplate='{javax.validation.constraints.Size.message}'}]
Комментарии:
1. Я не думаю, что она наследуема, но вы можете проверить источник аннотации, чтобы узнать, есть ли у нее аннотация @Inherited . Я был бы удивлен, если бы это было так.
2. Я переопределяю метод getXXX, разве в этом случае родительский метод (и его аннотации) игнорируются?
3. О, я понимаю — я неправильно понял, извините. Я посмотрю еще раз 🙂
Ответ №1:
Все ограничения, которые находятся где-то в иерархии, также проверяются. Согласно документации:
Аннотации ограничений агрегируются, если переопределены методы.