首页 > 解决方案 > Java 在类级别上验证字段条件

问题描述

假设我有以下 Pojos 和约束。

public class Pojo1 {
    @NotNull
    private String field1;
    @NotNull
    private String field2; // <--- I only want this NotNull in Pojo3.java but not in Pojo2.java
}

public class Pojo2 {
    @Valid
    private Pojo1 pojo1;
}

public class Pojo3 {
    @Valid
    private Pojo1 pojo1;
    @Valid
    private Pojo2 pojo2;
}

我希望 Pojo1.field2 仅在 Pojo3 下验证,而不是在 Pojo2 下验证。换句话说,以下 JSON 应该通过验证

{
   "pojo1": {
      "field1": "something",
      "field2": "something"
   },
   "pojo2": {
      "pojo1": {
         "field1": "something"
      }
   }
}

标签: javavalidation

解决方案


尝试用 Pojo3 上的自定义验证替换 Pojo1.field2 验证,例如:

public class Pojo1 {

    @NotNull
    private String field1;

    // @NotNull // don't validate it generally
    private String field2;
}
public class Pojo2 {
    @Valid
    private Pojo1 pojo1;
}

public class Pojo3 {

    @Valid
    private Pojo1 pojo1;

    @Valid
    private Pojo2 pojo2;

    @javax.validation.constraints.AssertTrue
    public boolean isPojo1Valid() {
        return pojo1 == null || pojo1.getField2() != null;
    }
}

推荐阅读