Tôi mới sử dụng Spring Boot. Trong Bộ điều khiển của tôi, tôi đang sử dụng UUID
s làm @PathVariable
. Theo mặc định, spring return MethodArgumentTypeMismatchException
khi chuyển một số không hợp lệ UUID
.công cụ chuyển đổi tùy chỉnh không được đăng ký trong khởi động mùa xuân
Khi khách hàng chuyển số UUID
không hợp lệ, tôi muốn ném InvalidUUIDException
tùy chỉnh, để tôi có thể trả lại ErrorDto tùy chỉnh bằng cách sử dụng Ngoại lệ này.
Để lưu ý rằng tôi đang cố gắng đăng ký tùy chỉnh UUIDConverter
(triển khai 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);
}
}
Để đăng ký thành phần này, tôi thêm bộ chuyển đổi này vào lò xo ConversionService
. Sử dụng 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;
}
}
Tôi cũng cố gắng sử dụng @Component
thay vì @Configuration
như nó đã được đề cập ở đây: Spring not using mongo custom converters
giải pháp khác tôi đã cố gắng ra: Đặt tên đậu conversionServiceFactoryBean
thay vì conversionService
. Hoặc gọi bean.afterPropertiesSet()
và retuning một ConversionService
sử dụng bean.getObject()
...
Tôi cũng đã cố gắng để mở rộng từ WebMvcConfigurerAdapter
, trọng addFormatters
và thêm chuyển đổi của tôi có sử dụng addConverter
...
Như đã đề cập ở đây: Tôi đã How to register custom converters in spring boot? cũng đã cố gắng đăng ký bộ chuyển đổi dưới dạng trực tiếp @Bean
.
Không quan trọng những gì tôi đã thử, UUIDConverter
sẽ không được áp dụng.
Giải pháp chính xác làm gì đó giống như thế nào trong khởi động mùa xuân?
Có ai có thể giúp đỡ ở đây không? Tôi đang làm gì sai?
Tôi có cùng sự cố chính xác – wasabi
bạn đã bật SprinbWebMvc chưa? – hovanessyan