Условная проверка полей запроса при весенней загрузке - PullRequest
0 голосов
/ 04 ноября 2019

Я только начал с проверки поля тела запроса и реализовал все основные аннотированные проверки. У меня проверка поля зависит от другого поля.

В этом классе используется тело запроса.

Условие проверки:

Если value1.equals('OK'), тогда value2 должно совпадатьопределенный шаблон регулярных выражений, если он не соответствует шаблону регулярных выражений, то выдает ошибку проверки, говоря, что value2 не соответствует шаблону регулярных выражений.

Я пытался создать пользовательскую аннотацию, но я не сделал 'не знаю, как это сделать и как это использовать

Public class test
{
    String value1;
    String value2;
}

Я ожидаю реализации условной проверки для этого конкретного случая

1 Ответ

0 голосов
/ 04 ноября 2019

Существует несколько способов проверки тела запроса или, другими словами, реализация проверки на стороне сервера. Некоторые из них могут быть

  1. Использовать основные аннотации
  2. Создание пользовательских аннотаций для пользовательской проверки
  3. Создание пользовательских валидаторов для пользовательской проверки

Мой любимый вариант 3. Поэтому ниже я приведу решение для варианта 3. Шаги:

  1. Создайте свой собственный валидатор

    import org.springframework.stereotype.Component;
    import org.springframework.validation.Errors;
    import org.springframework.validation.ValidationUtils;
    import org.springframework.validation.Validator;
    
    @Component
    public class MessageValidator implements Validator {
    
    @Override
    public boolean supports(Class<?> clazz) {
        return Message.class.equals(clazz);
    }
    
    @Override
    public void validate(Object target, Errors errors) {
        ValidationUtils.rejectIfEmpty(errors, "value1", "value1 is empty");
        ValidationUtils.rejectIfEmpty(errors, "value2", "value2 is empty");
        Message m = (Message) target; 
        if (m.getValue1().trim().equalsIgnoreCase("OK") && m.getValue2().matches(SOME_REGEX_PATTERN)) {
            errors.rejectValue("value2", "My custom validator is working");
        }
        }
      }
    
  2. BindВаш пользовательский валидатор в контроллере модели по

      public class MainSiteController
      {
      @Autowired
      private MessageValidator messageValidator;
    
      @InitBinder("message")
      protected void initMessageBinder(WebDataBinder binder) {
        binder.addValidators(messageValidator);
      }
      }
    
  3. Определите вашу модель как действительную и позвольте контроллеру выполнить работу

    @PostMapping( path = "/saveMessage")
    public String saveNewMessage(@Validated Message message, BindingResult bindingResult){
        if (bindingResult.hasErrors()) {
            return "message";
        }
        myService.saveNewMessageModel(message);
        return "messageSaved";
    }
    
...