Для создания пользовательского валидатора вы можете реализовать интерфейс ConstraintValidator.
Для этого вам необходимо создать пользовательскую аннотацию и аннотировать класс вашей модели этой аннотацией.
Затем создать свой класс валидатора RequestModuleEntryValidator , который реализует интерфейс ConstraintValidator и переопределяет метод isValid (), как показано ниже:
Ваш метод контроллера может выглядеть следующим образом:
public ResponseEntity<AnyObject> controllerMethod(@Valid @RequestBody PojoObject) {
.....
}
Ваш объект модели будет выглядеть следующим образом:
@ValidPojoRequest // Custom Annotation
public class PojoObject {
....with all properties
}
Пользовательский класс аннотации будет выглядеть следующим образом:
@Target({TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = PojoValidator.class)
public @interface ValidCancelRequest {
Class<?>[] groups() default {};
String message() default "{com.pojodetailvalidation.message}";
Class<? extends Payload>[] payload() default {};
}
И тогда ваш файл PojoValidator. java будет выглядеть следующим образом:
public class PojoValidator implements ConstraintValidator<ValidPojoRequest,PojoObject> {
@AutoWired
private MyService service;
public boolean isValid(PojoObject request, ConstraintValidatorContext context) {
// Call to your Service and check whether all conditions satisfy and accordingly return a boolean value.
//You can also return a proper error message for a particular property in your Pojo class by adding below
context.buildConstraintViolationWithTemplate("any message you wan to show to the one consuming your api").addConstraintViolation();
context.disableDefaultConstraintViolation();
return false;
}
}
isValid () метод возвращает логическое значение, если он возвращает ложь, тогда проверка не проходит