2013-12-20 87 views
2

我想這裏指定使用Java EE 6 Bean驗證

http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html

我已經註解一個簡單的現場

@Max(11) 
@Min(3) 
private int numAllowed; 

的文檔說,使用Java EE 6的驗證「對於建在約束條件下,默認實現可用「,但我該如何指定它。我的約束檢查沒有踢進去。我期望它能夠爲該領域的setter方法調用。在我的班級唯一的進口是

import javax.validation.constraints.Max; 
import javax.validation.constraints.Min; 

如何/我在哪裏指定實施? 我正在對一個簡單的POJO而不是@Entity類中的一個文件進行約束,這可以嗎?

回答

7

您對註釋的使用很好。每個放心的人都有一個驗證器實現。

但是,在某些時候,您需要觸發此POJO的驗證。如果它是@Entity它將是您的JPA提供程序觸發驗證,在您的情況下您需要自己做。

有一個nice documentation for Hibernate Validator這是JSR-303的參考實現。

public class Car { 
    @NotNull 
    @Valid 
    private List<Person> passengers = new ArrayList<Person>(); 
} 

使用Car和驗證:

Car car = new Car(null, true); 

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
Validator validator = factory.getValidator(); 
Set<ConstraintViolation<Car>> constraintViolations = validator.validate(car); 

assertEquals(1, constraintViolations.size()); 
assertEquals("may not be null", constraintViolations.iterator().next().getMessage()); 

你也可能需要閱讀how bean validation is integrated with other frameworks(JPA,CDI等)。

0

只要將一個約束註釋放到一個字段上就不會導致其評估。相反,某些機制必須通過javax.validation.Validator API觸發驗證;這會透明地發生,例如對於JPA實體,屬性綁定到Java EE 7中的JSF輸入元素或CDI bean的約束方法。如果要驗證未管理的POJO,則必須自行調用驗證程序。