在Spring Boot中以编程方式注册Spring Converter

我想以编程方式在Spring Boot项目中注册Spring Converter。在过去的Spring项目中,我已经像这样用XML完成了…

<!-- Custom converters to allow automatic binding from Http requests parameters to objects -->

<!-- All converters are annotated w/@Component -->

<bean id="conversionService"

class="org.springframework.context.support.ConversionServiceFactoryBean">

<property name="converters">

<list>

<ref bean="stringToAssessmentConverter" />

</list>

</property>

</bean>

我正在尝试找出如何在Spring Boot的SpringBootServletInitializer中进行操作

通过将StringToAssessmentConverter作为参数传递给getConversionService,我已经取得了一些进展,但是现在"No

default constructor

found"StringToAssessmentConverter类出现了错误。我不确定为什么Spring没有看到@Autowired构造函数。

@SpringBootApplication

public class Application extends SpringBootServletInitializer {

...

@Bean(name="conversionService")

public ConversionServiceFactoryBean getConversionService(StringToAssessmentConverter stringToAssessmentConverter) {

ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();

Set<Converter> converters = new HashSet<>();

converters.add(stringToAssessmentConverter);

bean.setConverters(converters);

return bean;

}

}

这是转换器的代码…

 @Component

public class StringToAssessmentConverter implements Converter<String, Assessment> {

private AssessmentService assessmentService;

@Autowired

public StringToAssessmentConverter(AssessmentService assessmentService) {

this.assessmentService = assessmentService;

}

public Assessment convert(String source) {

Long id = Long.valueOf(source);

try {

return assessmentService.find(id);

} catch (SecurityException ex) {

return null;

}

}

}

完全错误

Failed to execute goal org.springframework.boot:spring-boot-maven-

plugin:1.3.2.RELEASE:run (default-cli) on project yrdstick: An exception

occurred while running. null: InvocationTargetException: Error creating

bean with name

'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPo

stProcessor': Invocation of init method failed; nested exception is

org.springframework.beans.factory.UnsatisfiedDependencyException: Error

creating bean with name 'conversionService' defined in

me.jpolete.yrdstick.Application: Unsatisfied dependency expressed through

constructor argument with index 0 of type

[me.jpolete.yrdstick.websupport.StringToAssessmentConverter]: : Error

creating bean with name 'stringToAssessmentConverter' defined in file

[/yrdstick/target/classes/me/jpolete/yrdstick/websupport

/StringToAssessmentConverter.class]: Instantiation of bean failed; nested

exception is org.springframework.beans.BeanInstantiationException: Failed

to instantiate

[me.jpolete.yrdstick.websupport.StringToAssessmentConverter]: No default

constructor found; nested exception is java.lang.NoSuchMethodException:

me.jpolete.yrdstick.websupport.StringToAssessmentConverter.<init>();

nested exception is

org.springframework.beans.factory.BeanCreationException: Error creating

bean with name 'stringToAssessmentConverter' defined in file [/yrdstick

/dev/yrdstick/target/classes/me/jpolete/yrdstick/websupport

/StringToAssessmentConverter.class]: Instantiation of bean failed; nested

exception is org.springframework.beans.BeanInstantiationException: Failed

to instantiate

[me.jpolete.yrdstick.websupport.StringToAssessmentConverter]: No default

constructor found; nested exception is java.lang.NoSuchMethodException:

me.jpolete.yrdstick.websupport.StringToAssessmentConverter.<init>()

回答:

答案是,您只需将转换器注释为@Component

这是我的转换器示例

import org.springframework.core.convert.converter.Converter;

@Component

public class DateUtilToDateSQLConverter implements Converter<java.util.Date, Date> {

@Override

public Date convert(java.util.Date source) {

return new Date(source.getTime());

}

}

然后,当Spring需要进行转换时,将调用转换器。

我的Spring Boot版本: 1.4.1

以上是 在Spring Boot中以编程方式注册Spring Converter 的全部内容, 来源链接: utcz.com/qa/429669.html

回到顶部