Sono nuovo di primavera di avvio. Nel mio controller sto usando UUID
s come @PathVariable
. Entro la primavera impostazione predefinita restituisce MethodArgumentTypeMismatchException
quando passa un invalido UUID
.convertitori personalizzati non registrati in avvio primavera
Quando il client passa un valore non valido UUID
Voglio lanciare un numero personalizzato InvalidUUIDException
, in modo che sia possibile restituire un erroreDato personalizzato utilizzando questa eccezione.
Per ottenere che sto tentando di registrare un numero personalizzato UUIDConverter
(implementazione 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);
}
}
per registrare questo componente, sto aggiungendo questo convertitore a molle ConversionService
. Utilizzo di 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;
}
}
ho provato anche ad utilizzare @Component
invece di @Configuration
come è stato detto qui: Spring not using mongo custom converters
Altre soluzioni ho provato: Naming il fagiolo conversionServiceFactoryBean
invece di conversionService
. O chiamando bean.afterPropertiesSet()
e risintonizzare un ConversionService
utilizzando bean.getObject()
...
Ho anche cercato di estendersi da WebMvcConfigurerAdapter
, ignorando addFormatters
e aggiungere il mio convertitore lì usando addConverter
...
come accennato qui: How to register custom converters in spring boot? ho ha anche provato a registrare il convertitore direttamente come @Bean
.
Non importa quello che ho provato, non verrà applicata la UUIDConverter
.
Qual è la soluzione corretta fare qualcosa di simile in primavera-boot?
Qualcuno può aiutare qui? Cosa sto facendo di sbagliato?
Ho esattamente lo stesso problema – wasabi
hai attivato SprinbWebMvc? – hovanessyan