当前位置: 首页 > 知识库问答 >
问题:

使用ConversionServiceFactoryBean或GenericConversionService注册自定义转换器?

满和安
2023-03-14
@Bean
public ConversionService conversionService(
        Set<Converter<?, ?>> converters,
        ConversionServiceFactoryBean factory) {
    factory.setConverters(converters);
    return factory.getObject();
}

@Bean
public ConversionServiceFactoryBean conversionServiceFactoryBean() {
    return new ConversionServiceFactoryBean();
}
<bean id="conversionService"
        class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="example.MyCustomConverter"/>
        </set>
    </property>
</bean>
ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [java.time.Duration]
@Bean
public ConversionService conversionService(Set<Converter<?, ?>> converters) {
    final GenericConversionService conversionService = new GenericConversionService();
    converters.forEach(conversionService::addConverter);
    return conversionService;
}

为什么它不能与ConversionServiceFactoryBean和Java配置一起工作?为什么它与GenericConversionService一起使用?

共有1个答案

方楷
2023-03-14

这是因为您试图在初始化ConversionServiceFactoryBeanbean之后,将转换器注册到ConversionService方法中,即在构造工厂bean时已经调用了AfterPropertiesSet。如果要使用问题中的第一个方法,则需要在调用afterPropertiesSet方法之前注册转换器。因此,我将按以下方式更改ConversionServiceConversionServiceFactoryBean方法;

@Bean
public ConversionService conversionService(ConversionServiceFactoryBean factory) {
    return factory.getObject();
}

@Bean
public ConversionServiceFactoryBean conversionServiceFactoryBean(Set<Converter<?, ?>> converters) {
    ConversionServiceFactoryBean factory = new ConversionServiceFactoryBean();
    factory.setConverters(converters);
    return factory;
}

但是,分离这两个方法没有任何意义,因为ConversionService的实例已经在spring上下文中注册了。因此,最好将这两种方法合并如下;

注方法名从ConversionServiceFactoryBean更改为ConversionService。如果没有名称更改,Spring将抛出一个异常,无法按预期转换数据。

@Bean
public ConversionServiceFactoryBean conversionService(Set<Converter<?, ?>> converters) {
    ConversionServiceFactoryBean factory = new ConversionServiceFactoryBean();
    factory.setConverters(converters);
    return factory;
}
 类似资料:
  • 我是新来的Spring Boot。在我的控制器中,我使用s作为。缺省情况下,在传递无效的时,Spring返回。 当客户端传递一个无效的时,我想抛出一个自定义的,这样我就可以使用这个异常返回一个自定义的错误。 我试图注册一个定制的(实现)。 为了注册这个组件,我将这个转换器添加到springs。使用。 我还尝试使用而不是这里提到的:Spring没有使用mongo定制转换器 我尝试过的其他解决方案是:

  • 所以很明显,添加类型转换器还有其他方式,我通过显式配置转换服务来搞砸了?有没有一种方法可以注册自定义类型转换器而不踩到其他转换器?

  • 我是新来的Laravel。我有两种不同的用户类型:老师和学生。教师在网站注册表格中注册账户,但学生注册由windows应用程序提供。所以我必须为这个应用程序提供一个API。默认Laravel认证是足够的教师注册,但我可以使用相同的AuthController API注册?我不需要视图或重定向到网站。

  • 我已经为log4j2编写了一个自定义触发策略,该策略将被回滚。在每小时/天/你的工作时间间隔结束时,按照本SO帖子的建议记录文件。 虽然我遵循基于时间的触发策略约定(命名等),但我无法看到我的策略被实例化和使用。 解决方案由3个java文件和一个maven文件组成,可在github上获得 在这里,您可以从政策本身找到主要内容: log4j2。xml文件: 编辑: 在调试过程中,我了解到在log4j

  • 我试图创建Laravel 5.7的第一个项目。 在这个项目中,我有三个不同的领域和三个不同的登录(例如,用户登录,管理员登录,技术人员登录) 现在,我想自定义第一次登录(url,html,输入,类,数据库表,数据库列ecc...),但我不知道该怎么做。 第一次登录的URL是 我的桌子是: 我已经搜索了很多,用我找到的信息,我试图这样做: config/auth。php: 网状物php 登录控制器。

  • 嘿,伙计们,我是拉威尔的新手,我正在尝试为和创建一个登录系统,管理员可以在其中注册和编辑用户详细信息。我知道Laravel有一个内置的身份验证系统,但它没有编辑用户详细信息的功能。我认为有两种选择可能有效 使用现有的身份验证系统进行注册/登录,同时添加一个新的控制器和视图来编辑用户的详细信息。 使用新的迁移表从头开始创建新的注册/登录系统,并实现编辑功能。但我关心的是,如果我从头开始创建如何使用A