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

时间:2015-01-16 08:39:28

标签: java jersey jax-rs 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;

    ...
}

这似乎工作正常。

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

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

public class POJO {
    @NotNull
    protected final String name;

    @NotNull
    protected final POJOInner inner;

    ...
}

1 个答案:

答案 0 :(得分:20)

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

  

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

     

...

     

@Valid注释以递归方式应用