是否可以使用验证API来验证模型对于某些外部操作是否正确?

问题描述:

好吧,我们希望允许用户进行手动迁移。要做到这一点,模型对象必须处于某种状态。我不想验证这个类的每个实例,或者真的自动实现这个类的任何实例。我知道如何手动调用验证器(作为一般事情),但我想知道的是我可以在模型上没有这些注释的情况下执行验证器吗?我只想简单地执行一个任意的验证代码。想要使用验证API的原因是因为它收集了约束违规。是否可以使用验证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()) 
    } 
} 
+0

出于兴趣,为什么你想避免注释?它们的一个优点是模型的每个用户都知道他们需要遵守的约束条件。如果您希望在迁移过程中仅应用一些验证,而不是在对象生命周期的其他时间点,则验证组可能对您有用。 – Gunnar

Bean验证是基于声明的约束原则,即约束声明一次 - 使用注释,XML描述符或(在Hibernate验证)的API - 然后确认为在对象生命周期中的适当点处需要。所以你所描述的在Bean验证中不是直接可能的。尽管如此,Hibernate验证程序constraint mapping API仍可能对您有所帮助。您将使用API​​在移植期间声明您想要应用的约束,并使用这些约束映射设置验证器。