使用Java EE 6 Bean验证

use*_*591 2 java java-ee bean-validation java-ee-6

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

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

我注释了一个简单的字段

@Max(11)
@Min(3)
private int numAllowed;
Run Code Online (Sandbox Code Playgroud)

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

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*tör 8

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

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

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

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

使用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() );
Run Code Online (Sandbox Code Playgroud)

您可能还想了解bean验证如何与其他框架(JPA,CDI等)集成.