У меня есть стандартное приложение весенней загрузки с некоторыми конечными точками 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?