You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring使用FreeMarker模板时类型转换报错求解决方案

Spring整合FreeMarker类型转换报错解决方案

错误根因

报错核心信息:无法将freemarker.template.Configuration类型转换为org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean类型
该错误是因为FreeMarkerConfigurationFactoryBean是Spring的FactoryBean接口实现类,Spring容器默认会返回工厂类生产的业务对象(即FreeMarker原生的Configuration配置实例),而非工厂类本身,因此注入时出现类型不匹配。

可选解决方案

方案一:调整业务类属性类型(最优方案)

直接在DomainManager类中将待注入属性的类型修改为freemarker.template.Configuration,对应调整Setter方法的入参类型即可,无需修改现有XML配置。
代码示例:

import freemarker.template.Configuration;

public class DomainManager {
    // 替换原FreeMarkerConfigurationFactoryBean类型
    private Configuration freeMarkerConfiguration;
    private String sampleFile;

    public void setFreeMarkerConfiguration(Configuration freeMarkerConfiguration) {
        this.freeMarkerConfiguration = freeMarkerConfiguration;
    }

    public void setSampleFile(String sampleFile) {
        this.sampleFile = sampleFile;
    }

    // 其余业务逻辑省略
}

方案二:修改XML注入配置(适配不修改业务代码场景)

如果确实需要注入FreeMarkerConfigurationFactoryBean工厂类本身,只需在XML的ref属性值前添加&前缀,即可告诉Spring返回工厂类实例而非其生产的对象:
修改后的XML配置:

<bean id="domainManager" class="DomainManager">
    <property name="freeMarkerConfigurationFactoryBean" ref="&freeMarkerConfigurationFactoryBean"/>
    <property name="sampleFile" value="sampleFile.ftl" />
</bean>

内容的提问来源于stack exchange,提问作者Shiva D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:08