java - 是否可以使用 Hibernate Validation 运行一项具体验证

标签 java hibernate validation

我们在一个项目中使用 Hibernate Validation 很长时间了,它效果很好。 但我想知道是否可以仅按需运行某些验证,而不是在 validator 上调用 valid() 时或保存之前运行。 例如我有一个类:

@ValidationOne
@ValidationTwo
@Entity
public class MyClass{
  ...

}

ValidationOne 和 ValidationTwo 由接口(interface)定义,如 Validation Api 所示:

@Target({ ElementType.TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = ValidationOneValidator.class)
@Documented
public @interface ValidationOne {

  String message() default "{ValidationOne.invalid.message}";

  Class<?>[] groups() default {};

  Class<? extends Payload>[] payload() default {};
}

validator 类遵循验证 API 规范:

public class ValidationOneValidator implements ConstraintValidator<ValidationOne, MyClass>{
  ...
}

这些验证运行良好。但现在我想知道 ValidationOne 上的条件在我的 Controller 中是否在特定方法上为真。我不想重复 ValidationOneValidator 代码。有办法做到吗?

最佳答案

看到注释定义上的groups()属性了吗?它允许您使用类来指定要运行的验证。

例如,让我们假设:

public class SingleRun {}

@ValidationOne(groups={SingleRun.class, javax.validation.groups.Default.class})
@ValidationTwo
@Entity
public class MyClass{...}

这允许您像这样运行单个验证:

javax.validation.Validator validator = ...;
MyClass myClass = ...;
validator.validate(myClass, SingleRun.class);

手动验证时,您可以指定要通过组类运行的验证。如果您不指定,则采用默认组。

关于java - 是否可以使用 Hibernate Validation 运行一项具体验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32756557/

相关文章:

angular - Angular 6 中的输入验证无法收到错误

java - 将独立 Java 程序连接到 WildFly 服务器上的 JMS 时出错

java - setOpaque为true,但JPanel不会改变背景颜色

java - 使用tomcat登录后将请求从servlet转发到jsp

Spring,Spring Data JPA : org. hibernate.hql.internal.ast.QuerySyntaxException:测试未映射

php - 单击按钮时触发 jquery validate()

java - 如何理解log4j.xml文件

java - 我在 hibernate(hibernate 3.5.5) 中遇到了 LikeExpression 的过期问题

xml - maven 和 xml 解析的 Hibernate 依赖问题

php - 处理失败的 nonce 验证的最佳方法是什么?