【问题标题】:Is it possible to use the Validation API to validate that a model is correct for some external operation?是否可以使用验证 API 来验证模型对于某些外部操作是否正确?
【发布时间】:2016-01-22 22:55:34
【问题描述】:

好的,所以我们希望允许用户进行手动迁移。为此,模型对象必须处于特定状态。我不想自动验证这个类的每个实例或这个类的任何实例。我知道如何手动调用验证器(一般来说),但我想知道我可以在模型上没有这些注释的情况下执行验证器吗?我只想对模型执行任意验证代码。想要使用验证 api 的原因是因为它收集约束违规。

比如这样的

class ValidForMigration implements ConstraintViolation<MyModel> {
  boolean isValid( MyModel model ) {
      if ( model.getFoo() == null ) { return false; }
      return true;
  }
}

MySvc {
   ...
   void doMigrate(... ) {
       validator.validate( myModel, new ValidForMigration() )
   }
}

【问题讨论】:

  • 出于兴趣,为什么要避免注释?它们的一个优点是模型的每个用户都知道他们需要遵守的约束。如果您希望在迁移期间应用某些验证,而不是在对象生命周期的其他时间点应用验证,验证组可能是一个有用的解决方案。

标签: java validation hibernate-validator


【解决方案1】:

Bean Validation 基于声明性约束的原则,即约束被声明一次 - 使用注解、XML 描述符或(在 Hibernate Validator 中)API - 然后在对象生命周期中的适当时间点根据需要进行验证。所以你描述的在 Bean Validation 中是不可能直接实现的。

不过,Hibernate 验证器 constraint mapping API 可能仍然对您有所帮助。您可以使用 API 声明要在迁移期间应用的约束,并使用这些约束映射设置验证器。

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 2021-12-09
    • 2011-04-25
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多