Contactez-nous

Intégration avec d'autres moteurs (Freemarker, Mustache - aperçu)

Découvrez comment intégrer les moteurs de templates Freemarker et Mustache dans Spring Boot comme alternatives à Thymeleaf pour le rendu de vues côté serveur.

Au-delà de Thymeleaf : Explorer d'autres options

Bien que Thymeleaf soit une option très populaire et bien intégrée pour le rendu de vues dans Spring Boot, l'écosystème Java offre plusieurs autres moteurs de templates matures et performants. Spring Boot reconnaît cette diversité et fournit un support d'auto-configuration pour plusieurs d'entre eux, rendant leur intégration aussi simple que celle de Thymeleaf.

Ce chapitre donne un bref aperçu de l'intégration de deux alternatives courantes : Apache Freemarker et Mustache. Le principe général reste le même que pour Thymeleaf : ajouter le starter approprié et Spring Boot s'occupe de la configuration de base.

Apache Freemarker (`spring-boot-starter-freemarker`)

Freemarker est un moteur de templates Java très établi, connu pour sa puissance, ses fonctionnalités étendues (macros, fonctions personnalisées) et ses bonnes performances. Sa syntaxe utilise des balises spécifiques (comme <#list items as item>...) et des expressions (${variable}).

Intégration : Ajoutez la dépendance spring-boot-starter-freemarker à votre projet.



    org.springframework.boot
    spring-boot-starter-freemarker

// build.gradle (Gradle)
implementation 'org.springframework.boot:spring-boot-starter-freemarker'

Auto-configuration : Spring Boot configure un FreeMarkerViewResolver et le moteur Freemarker. Par défaut :

  • Préfixe : classpath:/templates/ (fichiers dans src/main/resources/templates/).
  • Suffixe : .ftlh (Freemarker Template Language - HTML). D'autres extensions comme .ftl sont aussi possibles.

Configuration via Properties/YAML :

# application.properties
spring.freemarker.cache=false # Désactiver cache en dev
spring.freemarker.suffix=.ftl # Changer le suffixe si nécessaire
spring.freemarker.charset=UTF-8
# spring.freemarker.template-loader-path=classpath:/freemarker-templates/

Exemple (Contrôleur et Template) :

// Controller (identique à l'exemple Thymeleaf)
@Controller
public class FreemarkerGreetingController {
    @GetMapping("/fm/greeting")
    public String greet(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting"; // Résoudra vers /templates/greeting.ftlh (ou .ftl)
    }
}
// src/main/resources/templates/greeting.ftlh



    Freemarker Greeting


    

Hello from Freemarker!

Hello, ${name}!

Mustache (`spring-boot-starter-mustache`)

Mustache est un moteur de templates dit "logic-less" (sans logique complexe). Sa philosophie est de séparer strictement la logique (dans le code Java) de la présentation (dans le template). Sa syntaxe est très simple (utilisant des doubles accolades {{variable}}, {{#section}}...{{/section}}) et est implémentée dans de nombreux langages, ce qui peut être un avantage pour des équipes polyglottes ou le partage de templates.

Intégration : Ajoutez la dépendance spring-boot-starter-mustache à votre projet.



    org.springframework.boot
    spring-boot-starter-mustache

// build.gradle (Gradle)
implementation 'org.springframework.boot:spring-boot-starter-mustache'

Auto-configuration : Spring Boot configure un MustacheViewResolver et le moteur Mustache (basé sur l'implémentation `com.github.spullara.mustache.java`). Par défaut :

  • Préfixe : classpath:/templates/.
  • Suffixe : .mustache.

Configuration via Properties/YAML :

# application.properties
spring.mustache.cache=false # Désactiver cache en dev
# spring.mustache.prefix=classpath:/mustache-views/
# spring.mustache.suffix=.ms
spring.mustache.charset=UTF-8

Exemple (Contrôleur et Template) :

// Controller (identique aux exemples précédents)
@Controller
public class MustacheGreetingController {
    @GetMapping("/mu/greeting")
    public String greet(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting"; // Résoudra vers /templates/greeting.mustache
    }
}
// src/main/resources/templates/greeting.mustache



    Mustache Greeting


    

Hello from Mustache!

Hello, {{name}}!

{{#name}}

Your name is present!

{{/name}}

Autres moteurs supportés et choix

Spring Boot fournit également un support d'auto-configuration pour d'autres moteurs comme Groovy Templates (spring-boot-starter-groovy-templates). L'intégration de moteurs non directement supportés par un starter (comme Velocity - déprécié par Spring - ou Handlebars.java) est possible mais nécessite une configuration manuelle des beans ViewResolver et du moteur de template.

Le choix du moteur de templates dépend de plusieurs facteurs :

  • Préférence de syntaxe : La syntaxe basée sur les attributs de Thymeleaf, les balises de Freemarker ou les doubles accolades de Mustache.
  • Fonctionnalités requises : Freemarker est très riche, Thymeleaf est bien intégré à Spring, Mustache est volontairement simple.
  • Performance : Les benchmarks varient, mais Freemarker et Mustache sont souvent considérés comme très performants. Thymeleaf a fait d'énormes progrès et est également très performant.
  • Ecosystème et communauté : La taille de la communauté, la documentation disponible, les outils (support IDE).

L'important est que Spring Boot vous offre la flexibilité de choisir le moteur de templates qui convient le mieux à votre projet et à votre équipe, tout en simplifiant son intégration initiale grâce aux starters et à l'auto-configuration.