можно проверить ограничение кросс-полей в середине метода - PullRequest
0 голосов
/ 01 марта 2020

У нас есть класс обслуживания в 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, встроенной в каждый метод, который нуждается в этом, чтобы сделать это элегантным способом? Надеюсь, я объясню это хорошо

Большое спасибо заранее

...