java - 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"
}
}
}
解决方案
尝试用 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;
}
}