Ich bin neu in Spring Boot. In meinem Controller verwende ich UUID
s als @PathVariable
. In der Standardeinstellung gibt der Frühling MethodArgumentTypeMismatchException
zurück, wenn eine ungültige UUID
übergeben wird.benutzerdefinierte Konverter nicht im Spring Boot registriert
Wenn der Client einen ungültigen UUID
übergibt, möchte ich einen benutzerdefinierten InvalidUUIDException
, so dass ich in der Lage, eine benutzerdefinierte ErrorDto mithilfe dieser Ausnahme zurückgegeben werden kann.
Um zu erreichen, dass ich versuche, eine benutzerdefinierte UUIDConverter
(Implementierung org.springframework.core.convert.converter.Converter
) zu registrieren.
@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);
}
}
diese Komponente zu registrieren, ich bin das Hinzufügen dieser Konverter Federn ConversionService
. Verwenden Sie die 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;
}
}
Ich habe auch versucht @Component
statt @Configuration
zu verwenden, wie es hier erwähnt: Spring not using mongo custom converters
Andere Lösungen, die ich ausprobiert: conversionServiceFactoryBean
statt conversionService
die Bohne Namen. Oder rufen bean.afterPropertiesSet()
und eine ConversionService
mit bean.getObject()
Neuabstimmung ...
Ich habe auch von WebMvcConfigurerAdapter
zu erweitern versucht, zwingende addFormatters
und fügen Sie mein Konverter dort addConverter
mit ...
Wie hier erwähnt: How to register custom converters in spring boot? Ich habe versuchte auch den Konverter als @Bean
direkt zu registrieren.
Es spielt keine Rolle, was ich ausprobiert habe, die UUIDConverter
wird nicht angewendet.
Was ist die richtige Lösung, um so etwas in Spring-Boot zu tun?
Kann mir hier jemand helfen? Was mache ich falsch?
Ich habe das exakt gleiche Problem – wasabi
Haben Sie SprinbWebMvc aktiviert? – hovanessyan