Spring MVC кастомная аннотация для валидации форм – Devcolibri

  • Автор темы Lucania
  • Обновлено
  • 06, May 2023
  • #1
Для создания кастомной аннотации для валидации формы в Spring MVC можно выполнить следующие шаги:
  • Создайте новый класс-аннотацию, отмеченный аннотацией
     @Constraint
    , которая указывает на использование этой аннотации в контексте валидации. Например:


javaCopy code

 @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CustomValidator.class)
public @interface CustomValidation {
 String message() default "Invalid field value";
 Class<?>[] groups() default {};
 Class<? extends Payload>[] payload() default {};
}


Здесь
 CustomValidation
- название созданной вами аннотации,
 CustomValidator
- класс, который будет выполнять проверку значения поля на соответствие заданным условиям.

  • Создайте класс
     CustomValidator
    , реализующий интерфейс
     ConstraintValidator
    с параметрами
     CustomValidation
    и типом проверяемого поля. Например:


javaCopy code
 public class CustomValidator implements ConstraintValidator<CustomValidation, String> {

 @Override
 public boolean isValid(String value, ConstraintValidatorContext context) {
 // Реализуйте проверку значения поля на соответствие заданным условиям и верните true или false
 }
}

  • Отметьте поле, которое вы хотите проверить с помощью вашей кастомной аннотации
     @CustomValidation
    . Например:


javaCopy code
 public class MyForm {
 @CustomValidation
 private String myField;
}

  • Добавьте
     @Valid
    перед параметром метода обработки формы в вашем контроллере. Например:


javaCopy code

 @PostMapping("/form")
public String processForm(@Valid MyForm myForm, BindingResult bindingResult) {
 if (bindingResult.hasErrors()) {
 // Обработка ошибок
 } else {
 // Обработка успешного заполнения формы
 }
}


Теперь при отправке формы значение поля
 myField
будет проверяться с помощью вашей кастомной аннотации
 @CustomValidation
. Если проверка не будет пройдена, соответствующая ошибка будет добавлена в объект
 BindingResult
.

Lucania


Рег
02 Feb, 2023

Тем
14666

Постов
27389

Баллов
100779
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно