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

时间:2019-04-04 16:04:13

标签: spring spring-boot groovy

我试图在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'

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

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>'
    }
}

1 个答案:

答案 0 :(得分:0)

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

@Configuration
class TemplateConfiguration extends GroovyMarkupConfigurer {

    final String resourceLoaderPath = 'classpath:/templates/'
    final Class<? extends BaseTemplate> baseTemplateClass = MainTemplate

}