Проверка нескольких полей с помощью Spring boot ConstraintValidator не работает

#java #spring #spring-boot #annotations

#java #spring #spring-boot #примечания

Вопрос:

Я пытаюсь проверить несколько полей с помощью Spring boot ConstraintValidator. Но он не гудит без ошибок.

Может кто-нибудь, пожалуйста, помочь мне разобраться..

Контроллер

 @PostMapping("/greetings")
    public Greeting greeting(@RequestBody Greeting greeting) {
        System.out.println(greeting);
        return greeting;
    }
  

Компонент, который необходимо проверить

 @GreetingAnnotation
public class Greeting {
    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}
  

Аннотация

 @Constraint(validatedBy = GreetingValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface GreetingAnnotation {
    String message() default "Field is required";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };
}
  

Валидатор

 public class GreetingValidator implements ConstraintValidator<GreetingAnnotation, Greeting > {

    @Override
    public boolean isValid(Greeting greeting, ConstraintValidatorContext context) {
        return greeting.getId() >=0 amp;amp; greeting.getContent().length() >=100; // Never gets called
    }
}
  

ПРИМЕЧАНИЕ: Это всего лишь пример заглушки для проверки объекта

Заранее спасибо

Комментарии:

1. 1) Добавьте аннотацию «@Component» в класс GreetingValidator. 2) Добавьте «@Valid» к параметру «приветствие»: «@RequestBody @Valid Приветствие приветствие»

Ответ №1:

Используете ли вы @Validated на уровне вашего контроллера?

Если нет, они добавляют его. Это сработает.