我已经阅读了很多关于 Java EE 6+ 附带的 Bean Validation API 的内容,并且我了解验证 api 如何工作的基础知识,但是在我一直在阅读的文档中,所有示例都是单元测试,而不是帮助我了解在哪里实施验证操作。
我正在开发一个三层架构系统。我想将验证放在服务层,因此如果表示层不同(即 Jax-RS、JSF 等),我可以重用验证代码。但我对如何实施上述操作感到困惑。这是我卡住的地方:
我有与模型中不同实体交互的 bean。例如,这是我的 bean 中用于用户交互的方法 ->
public User getUser(
@Min(value = 0, message = "Must have a positive userId") int uid)
throws RetrievalNotFoundException {
try {
// I WANT TO VALIDATE UID HERE
// find User with provided uid
User foundUser = em.find(User.class, uid);
// IF the user is inactive
if (foundUser.getIsActive() == 0) {
// cannot find the content
throw new RetrievalNotFoundException();
}
// close the entity manager
em.close();
// return the user
return foundUser;
}
这是休眠文档中的示例:
Car object = new Car( "Morris" );
Method method = Car.class.getMethod( "drive", int.class );
Object[] parameterValues = { 80 };
Set<ConstraintViolation<Car>> violations = executableValidator.validateParameters(
object,
method,
parameterValues
);
assertEquals( 1, violations.size() );
Class<? extends Annotation> constraintType = violations.iterator()
.next()
.getConstraintDescriptor()
.getAnnotation()
.annotationType();
assertEquals( Max.class, constraintType );
我真的应该再次实例化 bean 以访问它的方法 getUser() 吗?我很困惑。我遇到的另一个问题是,如果有人决定为 uid 放入一个溢出 int 容器的 int 会发生什么?我将如何验证这一点?
非常感谢您的帮助,我真的很感激。