У нас есть класс обслуживания в Java 8 приложении SpringBoot, которое должно проверить, соответствует ли поле объекта A объекту B, переданному в качестве параметра метода. Было бы прекрасно работать с использованием ConstraintValidator, если бы все сигнатуры методов принимали Объект A и Объект B в качестве параметров.
Метод в классе обслуживания:
@Override
@MyCheck
public String serviceDoLogic(Object B, Object A) {
......
}
Класс валидатора:
@SupportedValidationTarget(ValidationTarget.PARAMETERS)
public class MyCheckValidator implements ConstraintValidator<MyCheck, Object[]> {
@Override
public boolean isValid(
Object[] value,
ConstraintValidatorContext context) {
if( value.length <2 ) {
return true;
}
if ( ! value[0].equals(value[1].myField()) {
return false;
}
return true;
}
}
К сожалению, для некоторых методов в классе обслуживания он может принимать только строковый идентификатор для Объект A (так как это единственная вещь, известная в то время) и внутри службы, он должен вызвать DAO для получения объекта A. Таким образом, ограничение не может быть запущено для них.
Любое решение, кроме наличие логики проверки c, встроенной в каждый метод, который нуждается в этом, чтобы сделать это элегантным способом? Надеюсь, я объясню это хорошо
Большое спасибо заранее