JSR 303: возможно ли автоматически проверить весь граф? - PullRequest
1 голос
/ 13 марта 2012

Можно ли проверить весь график автоматически? Под полным графиком я подразумеваю проверяемый объект и все его поля, которые также являются бобами.

Или я должен пройти через них вручную, как показано ниже?

В настоящее время я делаю что-то вроде этого

    Set<ConstraintViolation<OrderProxy>> violationsOrder = 
         validator.validate(order, Default.class, ClientGroup.class);
    Set<ConstraintViolation<OrganizationProxy>> violationsOrg =  
         validator.validate(order.getSender(), Default.class, ClientGroup.class);
    Set<ConstraintViolation<PersonProxy>> violationsPerson = 
         validator.validate(order.getSender().getPerson(), 
                               Default.class, ClientGroup.class);

1 Ответ

6 голосов
/ 13 марта 2012

Вы можете аннотировать любые поля, которые вы хотите проверить с помощью @Valid, и при проверке вашего основного объекта, он также будет проверять поля.

Это работает, например:

public class Order
    @Valid
    protected Header header;
    @Valid
    protected List<Detail> details;
}

Вам нужно будет позвонить

Set<ConstraintViolation<Order>> violationsOrder = validator.validate(order, Default.class, ClientGroup.class);

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

javax.validation.Path rp = violation.getPropertyPath();
...