Как @Validated может работать с обычным методом? - PullRequest
0 голосов
/ 09 июля 2019

В проекте Springboot, когда я пытаюсь добавить @Validated в методе контроллера, это сработало. Но теперь я хочу добавить его в общий метод, но не получилось.

Попробуйте добавить @Validated по методу контроллера, все заработало

public class TaskValidator {
    private static final Logger logger = LogManager.getLogger("TaskValidatorLogger");
    public void validateTest(@Validated Test test) {
        logger.info("Validate: {}", test.getName());
    }

    public static void main(String[] args) {
        new TaskValidator().validateTest(new Test());
    }
}
@Data
public class Test {
    @NotNull(message = "name can not be null")
    private String name;
}

Должно выдать исключение MethodArgumentNotValidException, но не.

1 Ответ

0 голосов
/ 10 июля 2019

Spring MVC имеет возможность автоматически проверять @Controller входы. В предыдущих версиях это было до разработчика, чтобы вручную вызвать логику проверки.

В методах контроллера springboot автоматически связывает любые валидаторы с моделью и вызывает ее, когда данные привязаны к объекту.

Но в вашем случае вы пытаетесь проверить объект, и в этом случае springboot не может автоматически привязывать ваш валидатор к вашей модели и вызывать валидатор. Так что в этом случае вам нужно будет вручную связать объект с валидатор.

или вы можете вручную вызвать валидатор для bean-компонента, например:

@AutoWired
Validator validator;
...

validator.validate(book);
...