Я новичок в Spring Boot. В моем контроллере я использую UUID
s как @PathVariable
. По умолчанию весна возвращает MethodArgumentTypeMismatchException
при прохождении недопустимого UUID
.пользовательские преобразователи, не зарегистрированные в весеннем ботинке
Когда клиент проходит недействительный UUID
Я хочу бросить пользовательский InvalidUUIDException
, так что я могу вернуть настроенный ErrorDto с использованием этого исключения.
Чтобы архивировать, что я пытаюсь зарегистрировать заказ UUIDConverter
(внедрение org.springframework.core.convert.converter.Converter
).
@Component
public class UUIDConverter implements Converter<String, UUID>
{
private static final Pattern pattern = Pattern.compile("[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}");
@Override
public UUID convert(String input) throws InvalidUuidException
{
if (!pattern.matcher(input).matches()) {
throw new InvalidUuidException(input);
}
return UUID.fromString(input);
}
}
Чтобы зарегистрировать этот компонент, я добавляю этот конвертер для пружин ConversionService
. Использование ConversionServiceFactoryBean
.
@Configuration
public class ConversionServiceConfiguration
{
@Bean
public ConversionServiceFactoryBean conversionService()
{
ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
bean.setConverters(getConverters());
return bean;
}
private Set<Converter> getConverters()
{
Set<Converter> converters = new HashSet<>();
converters.add(new UUIDConverter());
return converters;
}
}
Я пытался также использовать @Component
вместо @Configuration
, как это было упомянуто здесь: Spring not using mongo custom converters
Другие решения Я попробовал: Именование боб conversionServiceFactoryBean
вместо conversionService
. Или позвонив bean.afterPropertiesSet()
и перенастройки с ConversionService
использованием bean.getObject()
...
Я также попытался продлить от WebMvcConfigurerAdapter
, перекрывая addFormatters
и добавить свой конвертер там, используя addConverter
...
Как уже упоминалось здесь: How to register custom converters in spring boot? Я также попытался зарегистрировать преобразователь как @Bean
напрямую.
Не имеет значения, что я пробовал, UUIDConverter
не будет применяться.
Какое правильное решение делает что-то подобное в весенней обуви?
Может ли кто-нибудь помочь? Что я делаю неправильно?
У меня есть тот же вопрос – wasabi
У вас есть SprinbWebMvc включен? – hovanessyan