在 Spring Boot 中配置 Groovy MarkupTemplateEngine 会导致 Cast 异常



我正在尝试为 Spring Boot 中的MarkupTemplateEngine配置一个自定义模板类,它允许在 Groovy 中编写模板。我的配置非常简单:

@Configuration
class TemplateConfiguration {
    @Bean
    public GroovyMarkupConfig groovyMarkupConfigurer() {
        new GroovyMarkupConfigurer().tap {
            resourceLoaderPath = 'classpath:/templates/'
            baseTemplateClass = MainTemplate
        }
    }
}

resourceLoaderPath更改为不存在的路径时,我收到 404 错误,该错误显示该配置已正确加载。但是,当使用上面的代码片段中的setBaseTemplateClass(Class<? extends BaseTemplate>)时,我收到以下错误:

org.codehaus.groovy.runtime.typehandling.GroovyCastException:
    Cannot cast object 
    'org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer@111bb71a'
    with class 'org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer'
    to class 'TemplateConfiguration'

我不知道为什么会出现此错误。我的自定义模板类如下所示:

abstract class MainTemplate extends BaseTemplate {
    MainTemplate(MarkupTemplateEngine templateEngine, Map model, Map<String, String> modelTypes,
                 TemplateConfiguration configuration) {
        super(templateEngine, model, modelTypes, configuration)
    }
    void doctype() {
        yieldUnescaped '<!DOCTYPE html>'
    }
}

让配置扩展GroovyMarkupConfigurer并覆盖属性解决了问题:

@Configuration
class TemplateConfiguration extends GroovyMarkupConfigurer {
    final String resourceLoaderPath = 'classpath:/templates/'
    final Class<? extends BaseTemplate> baseTemplateClass = MainTemplate
}

最新更新