2012-03-13 23 views
1

是否可以自動驗證整個圖形?通過完整的圖我的意思是被驗證的對象及其所有的字段也是bean。JSR 303:是否可以自動驗證整個圖形?

或者我必須手動遍歷它們,如下所示?

目前,我做這樣的事情

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); 

回答

6

您可以批註要與@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(); 
+0

我不認爲你應該將這些類傳遞給validate方法。這些參數用於指定驗證組:http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#example-drive-away驗證框架應該遍歷對象圖的任何標記的屬性@Valid默認。 – 2015-08-07 14:55:55