我是新来的Spring Boot。在我的控制器中,我使用UUID
s作为@PathVariable
。缺省情况下,在传递无效的UUID
时,Spring返回MultiodArgumentTypeMismatchExc0019
。
当客户端传递一个无效的UUID
时,我想抛出一个自定义的InvalidUUIDException
,这样我就可以使用这个异常返回一个自定义的错误。
我试图注册一个定制的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);
}
}
为了注册这个组件,我将这个转换器添加到springsConversionService
。使用转换服务工厂bean
。
@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没有使用mongo定制转换器
我尝试过的其他解决方案是:命名bean转换ServiceFactoryBean
而不是转换服务
。或者调用bean.afterProperties tiesSet()
并使用bean.getObject()
重新调整ConversionService
...
我还尝试从WebMVCConfigureAdapter
扩展,覆盖addFormatters
,并使用addConverter
将我的转换器添加到那里。。。
正如这里提到的:如何在spring boot中注册自定义转换器?我还尝试将转换器直接注册为@Bean
。
无论我尝试了什么,都不会应用UUIDConverter
。
在spring boot中执行类似操作的正确解决方案是什么<有人能帮忙吗?我做错了什么?
我只知道这个问题,因为我自己在另一个类中也做了同样的事情,并且花了数小时调试。。。
UUIDConverter
是一个已经由Spring本身注册的bean。从字面上选择任何其他名称,您应该会看到它出现。
所以很明显,添加类型转换器还有其他方式,我通过显式配置转换服务来搞砸了?有没有一种方法可以注册自定义类型转换器而不踩到其他转换器?
为什么它不能与和Java配置一起工作?为什么它与一起使用?
我是新来的Laravel。我有两种不同的用户类型:老师和学生。教师在网站注册表格中注册账户,但学生注册由windows应用程序提供。所以我必须为这个应用程序提供一个API。默认Laravel认证是足够的教师注册,但我可以使用相同的AuthController API注册?我不需要视图或重定向到网站。
我已经为log4j2编写了一个自定义触发策略,该策略将被回滚。在每小时/天/你的工作时间间隔结束时,按照本SO帖子的建议记录文件。 虽然我遵循基于时间的触发策略约定(命名等),但我无法看到我的策略被实例化和使用。 解决方案由3个java文件和一个maven文件组成,可在github上获得 在这里,您可以从政策本身找到主要内容: log4j2。xml文件: 编辑: 在调试过程中,我了解到在log4j
我最近将一个项目从Spring Boot1.5.1升级到2.0.0,但是我们的自定义执行器endpoint没有注册。我尝试了以下endpoint迁移指南(docs.spring.io、github和spring.io),以使用新方法迁移我们的自定义endpoint,但它不起作用。 下面是我正在尝试注册的简化endpoint: 我甚至尝试从类中删除并将其注册为主类中的bean,如下所示: 当我构建项
有什么建议吗?