Как включить валидатор bean-компонентов — Spring boot

Я использую данные из Kafka в класс компонента, который имеет проверку, чтобы убедиться, что сообщение, которое я читаю, имеет действительные данные.

Я добавил аннотации к классу компонента, такие как @NotNull и @Pattern, но они не применяются.

public class Class {
    @NotNull
    private String field1;

    @Pattern(regexp = "^Open$|^Active$|^Overdue$|^Inactive$")
    private String field2;
}

Как я могу убедиться, что проверка bean-компонента применяется, я использовал @RequestBody @Valid ранее при создании служб REST, но не знаю, как применить в этом сценарии.


person David    schedule 09.06.2019    source источник
comment
Следили ли вы за атрибутом тела запроса с помощью BindingResult result. Ошибки определения bean-компонента будут в файле BindingResult. Проверьте, есть ли какие-либо ошибки bean-компонента с помощью result.hasErrors()   -  person Shababb Karim    schedule 09.06.2019
comment
Я бы предложил использовать схемы avro и позволить десериализаторам обрабатывать недопустимые сообщения. Нет смысла отслеживать ошибки проверки, поскольку нет клиента, которому можно сообщить.   -  person Manish Bansal    schedule 09.06.2019
comment
@ManishBansal Раньше я использовал схемы Avro, но мне пришлось переключить пользовательские десериализаторы, где я реализую класс десериализатора клиента kafka.   -  person David    schedule 10.06.2019
comment
Kafka используется для связи B2B. Либо сообщение генерируется вашей собственной службой, либо сторонней службой. Поскольку это не введенные пользователем данные, в обоих случаях это действительные данные. Зачем вам это подтверждать? Вы можете заключить договор с производителями сообщений и игнорировать сообщение, если оно не может быть десериализовано. Пожалуйста, дайте мне знать ваш вариант использования здесь.   -  person Manish Bansal    schedule 10.06.2019


Ответы (1)


Программная проверка:

Некоторые фреймворки, такие как Spring, имеют простые способы запуска процесса проверки, просто используя аннотации. В основном это сделано для того, чтобы нам не приходилось взаимодействовать с программным API проверки.

Давайте теперь пойдем по ручному маршруту и ​​настроим все программно:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

Чтобы проверить bean-компонент, мы должны сначала иметь объект Validator, который создается с использованием ValidatorFactory.

Теперь мы собираемся настроить этого недопустимого пользователя с нулевым значением имени:

User user = new User();
user.setWorking(true);
user.setAboutMe("Its all about me!");
user.setAge(50);

Теперь, когда у нас есть валидатор, мы можем проверить наш компонент, передав его методу проверки. Любые нарушения ограничений, определенных в объекте User, будут возвращены как Set.

Set<ConstraintViolation<User>> violations = validator.validate(user);

Перебирая нарушения, мы можем получить все сообщения о нарушениях с помощью метода getMessage.

for (ConstraintViolation<User> violation : violations) {
log.error(violation.getMessage()); 
 }
person Deadpool    schedule 09.06.2019