You can write a custom constraint for your object.
The rest end point.
@RequestMapping(value = "/doSomething", method = RequestMethod.POST)
public ResponseEntity<String> doSomething(@RequestBody @Valid MyObject myObject) {
The body POJO.
@MyConstraint(message = "p1 is false, p3 should also be false")
public class MyObject {
private boolean p1;
private boolean p2;
private boolean p3;
//getters and setters
}
The constraint annotation being used by MyObject
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyConstraintValidator.class)
public @interface MyConstraint {
String message() default "Invalid object";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
The Validator that the constraint kicks off.
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, MyObject> {
@Override
public boolean isValid(MyObject value, ConstraintValidatorContext context) {
if (!value.isP1()) {
return value.isP1() == value.isP3();
}
return true;
}
}