Проверка группы Spring не работает на автоматически подключенных bean-компонентахJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проверка группы Spring не работает на автоматически подключенных bean-компонентах

Сообщение Anonymous »

Ситуация
Я пытаюсь создать автоконфигурацию, в которой некоторые свойства должны проходить проверку только в определенных случаях. У меня есть служба MyService, для которой требуются учетные данные Properties.username и Properties.password, а также OncePerRequestFilter, который перехватывает вызовы контроллера и вызывает MyService для выполнения некоторых действие, для которого требуется имя приложения Properties.app-name.
Вот глобальный макет:
  • < li>когда я не предоставляю ни свойств, ни MyService bean-компонент существует, автоконфигурация ничего не делает.
  • если bean-компонент MyService не существует, но я указываю имя пользователя и пароль в свойствах, я создаю новый MyService bean-компонент, и я хочу проверить имя пользователя и пароль.
  • если существует bean-компонент MyService, я создам OncePerRequestFilter и хочу проверить название приложения.
Для этого я хотел использовать группы проверки. Раньше я уже реализовал некоторую проверку свойств конфигурации и поэтому знаю, что Spring проверяет их при создании экземпляра объекта, но я никогда не пробовал использовать группы.
Первая попытка
Код
Автоконфигурация

Код: Выделить всё

@AutoConfiguration
@EnableConfigurationProperties(MyProperties.class)
public class MyAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "properties", name = { "username", "password" })
@Validated(CredentialsRequired.class)
public MyService myDefaultService(@Valid MyProperties properties) {
return new MyService(properties);
}

@Bean
@ConditionalOnBean(MyService.class)
@Validated(AppNameRequired.class)
OncePerRequestFilter myFilter(@Valid MyProperties properties, MyService myService) {
return new MyFilter(properties, myService);
}
}
Свойства конфигурации

Код: Выделить всё

@Data
@ConfigurationProperties("properties")
public class MyProperties {
@NotBlank(groups = AppNameRequired.class)
private String appName;

@NotBlank(groups = CredentialsRequired.class)
private String username;

@NotBlank(groups = CredentialsRequired.class)
private String password;
}
Результат
Когда я не предоставляю никаких свойств, ничего не выходит из строя, что и желательно. Однако, если я просто использую следующие свойства:

Код: Выделить всё

properties.username=
properties.password=
тогда и служба, и фильтр создаются без каких-либо проблем с автоматической проверкой, как показывает эта короткая модификация:

Код: Выделить всё

@Bean
@ConditionalOnBean(MyService.class)
@Validated(AppNameRequired.class)
OncePerRequestFilter myFilter(@Valid MyProperties properties, MyService myService, Validator validator) {
if(!validator.validate(properties, AppNameRequired.class).isEmpty()) {
throw new IllegalArgumentException();  // Should not be reached if validation works, but is thrown on instantiation
}

return new MyFilter(properties, myService);
}
Попробую использовать @Validated для класса свойств
Я также пробовал применить @Validated для MyProperties , но это мало что изменило. Более того, я заметил это в более глобальном случае:
  • когда в классе есть @Validated и все ограничения без групп действительны, ошибка не выдается, даже если некоторые ограничения с группами недействительны.
  • когда в классе есть @Validated, но хотя бы одно ограничение без группы нарушено, Spring не выполняет проверку создание экземпляра
    когда есть @Validated(AppNameRequired.class) в классе, и все ограничения без групп действительны, ошибок не возникает, даже если ограничения с группой AppNameRequired недействительны
Мой вывод и мой вопрос
После всего этого я пришел к выводу, что Spring не поддерживает группы проверки для проверка bean-компонента. Следовательно, мне интересно: есть ли способ выполнить эту условную проверку, полагаясь только на аннотации Jakarta и Spring Boot, или мне придется вручную вызывать валидатор для выполнения этого?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ired-beans
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»