El motor de plantillas de marcado Groovy está diseñado principalmente para generar marcado similar a XML (XML , XHTML, HTML5 y otros), pero puedes usarlo para generar cualquier contenido de texto. Spring Framework tiene integración incorporada para usar Spring MVC con el marcado Groovy.

El motor de plantillas de marcado de Groovy requiere Groovy 2.3.1+.
Configuración

El siguiente ejemplo muestra cómo configurar el motor de plantillas de marcado Groovy:

Java
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.groovy();
    }
    // Configurar el motor de plantillas de marcado en Groovy...
    @Bean
    public GroovyMarkupConfigurer groovyMarkupConfigurer() {
        GroovyMarkupConfigurer configurer = new GroovyMarkupConfigurer();
        configurer.setResourceLoaderPath("/WEB-INF/");
        return configurer;
    }
}
Kotlin
@Configuration
@EnableWebMvc
class WebConfig : WebMvcConfigurer {
    override fun configureViewResolvers(registry: ViewResolverRegistry) {
        registry.groovy()
    }
    // Configurar el motor de plantillas de marcado en Groovy...
    @Bean
    fun groovyMarkupConfigurer() = GroovyMarkupConfigurer().apply {
        resourceLoaderPath = "/WEB-INF/"
    }
}

El siguiente ejemplo muestra cómo configurarlo en XML:

<mvc:annotation-driven/>
<mvc:view-resolvers>
    <mvc:groovy/>
</mvc:view-resolvers>
<!-- Configurando el motor de plantillas de marcado en Groovy... -->
<mvc:groovy-configurer resource-loader-path="/WEB-INF/"/>

Ejemplo

A diferencia de los motores de plantillas tradicionales, el lenguaje de marcado Groovy se basa en un DSL que utiliza la sintaxis de la herramienta de compilación. El siguiente ejemplo muestra una plantilla de muestra para una página HTML:

yieldUnescaped '<!DOCTYPE html>'
html(lang:'en') {
    head {
        meta('http-equiv':'"Content-Type" content="text/html; charset=utf-8"')
        title('My page')
    }
    body {
        p('This is an example of HTML contents')
    }
}