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

  • Автор темы Lucania
  • 18
  • Обновлено
  • 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

Тем
27158

Постов
27328

Баллов
298908
Тем
49554
Комментарии
57426
Опыт
552966

Интересно