Spring Boot中applicationContext.xml转Java Config的问题处理
Spring XML配置转Spring Boot Java Config问题汇总
需求说明
需要将原有Spring项目的applicationContext.xml配置迁移为Spring Boot项目的Java Config配置,原始XML配置如下:
<bean id="InitialHandler" class="package.InitialHandler" scope="prototype"> <property name="rawResponseTemplate" ref="rawResponseRestTemplate"/> <property name="mimeMapper" ref="initialMimeMapper"/> </bean> <bean id="rawResponseRestTemplate" class="org.springframework.web.client.RestTemplate"> <property name="messageConverters"> <list> <bean class="package.CommonDocumentRawMessageConverter"/> </list> </property> </bean> <bean id="initialMimeMapper" class="package.ConfigurationBasedMapper"> <property name="configuration" ref="initialMimeConfig"/> </bean> <bean id="initialMimeConfig" class="org.apache.commons.configuration.XMLPropertiesConfiguration" scope="singleton"> <constructor-arg type="java.net.URL" value="classpath:FileINeedLoaded.xml"/> <property name="reloadingStrategy" ref="ReloadingStrategy"/> </bean> // CommonDocumentRawMessageConverter代码片段 import org.springframework.http.converter.HttpMessageConverter; public class CommonDocumentRawMessageConverter implements HttpMessageConverter<CommonDocument> {}
已实现的Java Config代码
@Bean public RestTemplate rawResponseRestTemplate() { RestTemplate rawResponseRestTemplate = new RestTemplate(); rawResponseRestTemplate.setMessageConverters(msgConverters()); return rawResponseRestTemplate; } private List<HttpMessageConverter<?>> msgConverters() { List<HttpMessageConverter<?>> newList = new ArrayList<HttpMessageConverter<?>>(); newList.add(new CommonDocumentRawMessageConverter()); return newList; }
启动报错信息
项目编译正常,但启动时抛出如下异常:
*************************** APPLICATION FAILED TO START *************************** Description: Failed to bind properties under 'prop.mime-mapper' to package.util.Mapper<java.lang.String>: Property: prop.mime-mapper Value: propMimeMapper Origin: "prop.mimeMapper" from property source "Config resource 'class path resource [application.yml]' via location 'optional:classpath:/' (document #0)" Reason: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [package.util.Mapper<java.lang.String>] Action: Update your application's configuration
相关代码片段
Prop配置类
@Getter @Setter public class propConfig { private String randomProp; private Mapper<String> mimeMapper; private RestTemplate rawResponseTemplate; }
业务Service类
@Slf4j @Service public class PropService extends DocumentManagementService { private final RestTemplate rawResponseTemplate; private final Mapper<String> mimeMapper; public PropService(@Autowired PropConfig propConfig) { this.rawResponseTemplate = propConfig.getRawResponseTemplate(); this.mimeMapper = propConfig.getMimeMapper(); } }
解决方案
报错原因是误将原XML中ref类型的Bean引用配置到了application.yaml中,Spring Boot会尝试将yaml中存储的字符串值转换为配置类对应的Mapper、RestTemplate类型,没有对应类型转换器就会抛出上述异常。
直接删除application.yaml中对应Mapper和RestTemplate类型的配置项即可,这类Bean引用不需要在yaml中配置,直接通过Java Config注册到Spring容器后即可正常注入使用。
内容的提问来源于stack exchange,提问作者user1746582
相关产品推荐
相关产品推荐

