Springboot: создание собственного источника сообщений для проверки и подключения - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть стандартное приложение весенней загрузки с некоторыми конечными точками REST, запись которых мне нужно проверить. Я создал собственный валидатор и пользовательское ограничение для значений ввода, и теперь мне нужно определить способ получения сообщений проверки из нашей базы данных. (Это бизнес-требование, и, как обычно, оно не открыто для обсуждения).

У меня уже есть служба / дао для получения сообщения, но у меня есть некоторые проблемы с пониманием того, что мне нужно сделать, чтобы подключите этот сервис с помощью Validator (поскольку большинство онлайн-материалов охватывают только собственные источники сообщений для файлов свойств).

Для того, что я собрал, мне нужно реализовать собственный MessageSource для обработки доступ к сообщениям, что-то вроде этого:

public class ExampleMessageSource implements MessageSource {

    @Autowired
    protected MessageService service;

    @Override
    public String getMessage(String code, Object[] args, String defaultMessage, Locale locale) {
      return service.getMessage(code, (Long)args[0], (String)args[1]));
    }

    /* And here the other function implementations */

}

Но отсюда, это просто terra incognita везде.

Как я уже писал, CustomValidator и ограничение прекрасно работает с pojo, который является вашим стандартным pojo с аннотацией @CustomConstraint (хотя я видел, что это должно быть что-то вроде @CustomConstraint(message = "something-here"). Я также видел некоторую информацию о сообщении Spring в конфигурации класс для использования моего пользовательского валидатора, но он использует класс ReloadableResourceBundleMessageSource, который реализует некоторые вещи, которые мне не нужны (или я думаю, что не нужны).

Что мне здесь не хватает?

РЕДАКТИРОВАТЬ: ОК, кажется, половина проблемы заключается в добавлении этого в класс @SpringBootApplication:

  @Autowired
  private SnowflakeMessageSource snowflakeMessageSource;

  /* ... */

  @Bean
  public LocalValidatorFactoryBean getValidator() {
    LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
    bean.setValidationMessageSource(messageSource );

    return bean;
  }

Но при проверке, это передавая "что-то здесь" из @CustomConstraint(message = "something-here") и переходя к функции publi c String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException MessageSource. Полагаю, мне нужно было бы узнать, как получить функцию public String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException, поскольку я мог бы поместить нужную мне информацию в MessageSourceResolvable. Есть идеи по этому поводу c?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...