Hibernate Validator:未评估方法约束

Hibernate Validator: Method constraints not evaluated

我有一个简单的 class,我想验证一下:

public class Model {
    @NotNull
    private String someField;

    @AssertTrue
    public boolean methodConstraint() { ... }
}

此 class 作为 spring 控制器方法输入的一部分得到验证。

我设法配置了字段的验证(在本例中为 someField),但由于某种原因甚至没有调用 methodConstraint(),更不用说验证了。我记得这是可能的。

我使用默认的Spring boot 2.6.6配置进行验证,这意味着我使用6.2.3版本的hibernate验证器,2.0.2 API版本。

我怀疑这是 ValidatorImpl:454 事情发展的方向,因为此方法仅验证(直接)元约束,但方法约束似乎并未被视为此类约束。

假设你有类似的东西

@Controller
class ModelController {
    ...
    public Result mappedMethod(@Valid Model model) {
        ...
    }
}

然后模型将被验证为 JavaBean。意味着只会考虑字段和吸气剂。

如果模型class修改为:

public class Model {
    @NotNull
    private String someField;

    @AssertTrue
    public boolean isMethodConstraint() { ... }
}

受约束的方法开始遵循 JavaBean 要求(方法名称以 is/get 开头并且有 0 个参数)然后该方法将在验证期间执行。

或者,如果 bean 不遵循 JavaBean 格式,则可以使用自定义策略。请参阅文档 here。但如果可能的话——更新模型 classes 并使受约束的方法以 is/get.

开头会更容易