Настроить валидатор для среды валидации весны - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть Application Level Service ниже:

@Service
public class DatasetApplicationService {

  private DatasetRepository datasetRepository;

  @Autowired
  public DatasetApplicationService(DatasetRepository datasetRepository) {
    this.datasetRepository = datasetRepository;
  }

  @Transactional
  public Dataset createDataset(@Valid CreateDatasetCommand newDatasetParams) {
    ...
  }
}

Посмотрите на метод DatasetApplicationService.createDataset, параметр CreateDatasetCommand отправляется в него с аннотацией @Valid.Аннотация может быть запущена для проверки CreateDatasetCommand при вызове метода (см. Проверка бина пружинной загрузки ).

У меня вопрос: могу ли я предоставить специальный валидатор для определенного параметра.Например, у меня есть CreateDatasetCommandValidator, который реализует org.springframework.validation.Validator Я хочу вызвать этот валидатор перед вызовом метода.


Я провожу некоторые исследования с InitBinder, но, похоже, он не срабатывает во время процесса, НЕУДАЧНЫЙ ПРИМЕР :

@Service
public class DatasetApplicationService {

  private DatasetRepository datasetRepository;
  private CreateDatasetCommandValidator validator;

  @InitBinder // <----- this is not triggered
  protected void initBinder(DataBinder binder) {
    binder.setValidator(validator);
  }

  @Autowired
  public DatasetApplicationService(DatasetRepository datasetRepository,
                                   CreateDatasetCommandValidator validator) {
    this.datasetRepository = datasetRepository;
    this.validator = validator;
  }

  @Transactional
  public Dataset createDataset(@Valid CreateDatasetCommand newDatasetParams) {
    ...
  }
}

1 Ответ

0 голосов
/ 29 сентября 2019

Каждый раз, когда контроллер получает запрос, метод @InitBinder будет вызываться, чтобы избежать вызова для каждого запроса, для которого мы определяем значение внутри него.

@InitBinder(value="user")
public void anyName(WebDataBinder binder){
binder.xxx()
}
  • Автопроводка валидатора.
  • Добавление валидатора в InitBinder.
  • Применение аннотации @Valid к модели в конкретном контроллере.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...