自动级联bean-validation递归验证,@ Valid注释

Jas*_*lio 35 java jax-rs jersey bean-validation

我正在验证Jersey中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;

    ...
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常.

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

有没有办法告诉bean验证器自动递归继续验证,即使没有@Valid注释?我希望我POJO如下:

public class POJO {
    @NotNull
    protected final String name;

    @NotNull
    protected final POJOInner inner;

    ...
}
Run Code Online (Sandbox Code Playgroud)

Erw*_*ier 24

实际上,根据规范,添加@Valid正是这个用例.来自JSR 303规范:

除了支持实例验证之外,还支持对象图的验证.图验证的结果作为一组统一的约束违规返回.考虑bean X包含Y类型字段的情况.通过使用@Valid注释注释字段Y,Validator将在验证X时验证Y(及其属性).

...

@Valid注释以递归方式应用

  • 虽然这可能是真的,但它没有解释是否有可能实现递归验证而无需注释所有成员,这就是OP所要求的. (8认同)
  • Spring默认情况下不执行此操作。.我正在使用Spring Boot 2.0.0.BUILD-SNAPSHOT (4认同)
  • “@Valid 注释是递归应用的”,但它似乎没有在 hibernate 实现中...... (2认同)