Конфигурирование Groovy MarkupTemplateEngine в Spring Boot приводит к исключению Cast - PullRequest
2 голосов
/ 04 апреля 2019

Я пытаюсь настроить собственный класс Template для MarkupTemplateEngine в Spring Boot, который позволяет писать шаблоны в 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 голосов
/ 08 апреля 2019

Расширение конфигурации GroovyMarkupConfigurer и перезапись свойств решают проблему:

@Configuration
class TemplateConfiguration extends GroovyMarkupConfigurer {

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

}
...