2012-03-13 74 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