使用Java EE 6 Beanvalidation

我正在尝试使用此处指定的Java EE 6validation

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

我注释了一个简单的字段

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

文档说“对于内置约束,可以使用默认实现”但是如何指定它。 我的约束检查没有开始。我希望它能够调用字段的setter方法。 我class上唯一的import是

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

如何/在何处指定实施? 我将约束放在一个简单的POJO而不是@Entity类的字段上,这样可以吗?

你对注释的使用就好了。 每个放心的人都有一个validation器实现。

但是,在某些时候,您需要触发此POJO的validation。 如果它是一个@Entity ,它将是你的JPA提供者触发validation,在你的情况下你需要自己做。

Hibernate Validator有一个很好的文档,它是JSR-303的参考实现。

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

使用Car并validation:

 Car car = new Car( null, true ); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Set> constraintViolations = validator.validate( car ); assertEquals( 1, constraintViolations.size() ); assertEquals( "may not be null", constraintViolations.iterator().next().getMessage() ); 

您可能还想了解beanvalidation如何与其他框架 (JPA,CDI等) 集成 。

仅将约束注释放入字段不会导致其评估。 相反,某些机制必须通过javax.validation.Validator API触发validation; 这种情况透明地发生,例如对于JPA实体,绑定到JSF输入元素的属性或Java EE 7中的CDI bean的约束方法。如果要validation未管理的POJO,则必须自己调用validation器。