Jersey/JAX-RS : 如何用@Valid自动递归地级联 Bean 验证?

2022-09-01 03:19:48

我正在泽西岛的 REST 资源端点中验证我的 POJO:

public class Resource {
    @POST
    public Response post(@NotNull @Valid final POJO pojo) {
        ...
    }
}

public class POJO {
    @NotNull
    protected final String name;

    @NotNull
    @Valid
    protected final POJOInner inner;

    ...
}

public class POJOInner {
    @Min(0)
    protected final int limit;

    ...
}

这似乎工作正常。

但是,仅当字段具有批注时,才会验证批注。将注释添加到不是基元的每个字段感觉不对。@Min(0)inner@Valid@Valid

有没有办法告诉bean验证器自动递归地继续验证,即使不存在注释?我希望我的如下:@ValidPOJO

public class POJO {
    @NotNull
    protected final String name;

    @NotNull
    protected final POJOInner inner;

    ...
}

答案 1

实际上,根据规范,添加@Valid正是针对此用例的。根据 JSR 303 规范:

除了支持实例验证外,还支持对象图形的验证。图形验证的结果作为一组统一的约束冲突返回。考虑以下情况:Bean X 包含类型为 Y 的字段。通过使用@Valid注释对字段 Y 进行批注,验证程序将在验证 X 时验证 Y(及其属性)。

...

以递归方式应用@Valid批注


答案 2

推荐