[JAVA] Utiliser Thymeleaf avec Azure Functions

Je pense qu'il est courant de renvoyer JSON s'il est sans serveur, mais le html peut également être retourné. Donc, sans le moteur de template, créer du HTML serait un peu pénible, j'ai donc essayé d'utiliser Thymeleaf.

supposition

Fondamentalement, on suppose que l'environnement est construit selon ce qui suit. (Ce n'est pas grave si vous créez un projet à partir de l'archétype de Maven.) https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-create-first-java-maven

Tout d'abord, un exemple de simple retour de HTML

Function.java


public class Function {
    @FunctionName("html")
    public HttpResponseMessage<String> html(@HttpTrigger(name = "html", methods = {
            "get" }, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<String> req) {
        String html = "<html><head><title>Prends-le</title></head><body><h1>Présager</h1></body></html>";
        HttpResponseMessage<String> res = req.createResponse(200, html);
        res.addHeader("Content-Type", "text/html");

        return res;
    }
}

Assemblez le code HTML par vous-même et renvoyez-le avec le type HttpResponseMessage. À ce stade, si vous ne définissez pas Content-Type sur text / html avec addHeader, le navigateur le reconnaîtra comme une simple chaîne de caractères.

Ce serait bien si le html était aussi simple que cela, mais j'aimerais utiliser Thymeleaf car cela peut être douloureux quand cela devient compliqué ou que des éléments dynamiques apparaissent.

Utilisez Thymeleaf

Tout d'abord, ajoutez thymeleaf à la dépendance de pom.xml. La version est à jour pour le moment.

pom.xml


<dependency>
  <groupId>org.thymeleaf</groupId>
  <artifactId>thymeleaf</artifactId>
  <version>3.0.9.RELEASE</version>
</dependency>

Puis la source.

Fuction.java


public class Function{
    @FunctionName("thymeleaf")
    public HttpResponseMessage<String> thymeleaf(@HttpTrigger(name = "thymeleaf", methods = {
            "get" }, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<String> req) {
        
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setTemplateMode(TemplateMode.HTML);

        templateResolver.setPrefix("template/");
        templateResolver.setSuffix(".html");
        TemplateEngine templateEngine = new TemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);

        Context context = new Context();
        context.setVariable("message", "hogehoge");
        String html = templateEngine.process("test", context);

        HttpResponseMessage<String> res = req.createResponse(200, html);
        res.addHeader("Content-Type", "text/html");

        return res;
    }
}

Je l'utilise habituellement avec Spring, donc je n'en étais pas vraiment conscient, mais il existe plusieurs types de Template Resolver. Cette fois, nous utiliserons ClassLoaderTemplateResolver.

De plus, pour transmettre la valeur au côté Thymeleaf, il est nécessaire de créer un objet Contexte. Je pense que c'est comme un mannequin au printemps.

test.html


<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <title>Thymeleaf</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <p th:text="${message}">Thymeleaf!!</p>
  </body>
</html>

J'ai fait du html comme ça. Il se trouve dans src / main / resources / template.

Après cela, vous pouvez le démarrer, le déployer et vérifier le fonctionnement.

Impressions

Cette fois, une instance liée à Thymeleaf est créée dans la méthode, mais il peut être préférable de l'exécuter dans le constructeur et d'en faire une variable d'instance. Cependant, cela n'a pas de sens si le constructeur est exécuté à chaque fois qu'il est accédé. S'il est sans serveur, je ne comprends pas le fonctionnement ici, donc je pense que je dois le vérifier un jour.

De plus, je pense que si vous le faites jusqu'à présent, vous devriez le faire rapidement avec Spring Boot. S'il est sans serveur, il dispose d'une fonction Auto Scaling, c'est donc un mérite que vous puissiez en profiter.

Recommended Posts

Utiliser Thymeleaf avec Azure Functions
Utiliser Azure Bing SpellCheck avec Java
Utiliser Java 11 avec Google Cloud Functions
Utiliser ProGuard avec Gradle
Fonctions Azure en Java
Utiliser Puphpeteer avec Docker
Utilisez XVim2 avec Xcode 12.0.1
Utilisation de CentOS avec LXD
Utiliser Webmock avec Rspec
Utiliser les WebJars avec Gradle
Générer du JavaScript avec Thymeleaf
Utilisez jlink avec gradle
Utiliser la requête agrégée (nombre) avec le SDK Java Azure CosmosDB
Résolution du problème lorsque Azure Functions a cessé de fonctionner en Java
Utiliser des couches Lambda avec Java
Utiliser GDAL avec Python avec Docker
Utiliser le certificat pfx avec Okhttp3
Utiliser l'API Bulk avec RestHighLevelClient
Utilisez SDKMAN! Avec Git Bash
Créer des fonctions Azure en Java
Utilisez plusieurs bases de données avec Rails 6.0
Utilisez thymeleaf3 avec le parent sans spécifier spring-boot-starter-parent dans Spring Boot
Utiliser Spring JDBC avec Spring Boot
Utilisez Ruby avec Google Colab
Utiliser SpatiaLite avec Java / JDBC
Utilisez log4j2 avec YAML + Gradle
[Docker] À utiliser à tout moment avec Docker + Rails
Utiliser PlantUML avec Visual Studio Code
Utiliser l'authentification de base avec Spring Boot
Utiliser java avec MSYS et Cygwin
Implémenter le lien texte avec Springboot + Thymeleaf
Utiliser le constructeur avec des arguments dans cucumber-picocontainer
Utiliser Microsoft Graph avec Java standard
Utiliser le type inet PostgreSQL avec DbUnit
Utilisez bootstrap 4 avec PlayFramework 2.6 (pas de CDN)
Utiliser Git avec SourceTree et Eclipse
Utilisez JDBC avec Java et Scala.
Utiliser DataDog APM avec des frameworks non pris en charge
Comment utiliser mssql-tools avec Alpine
Utiliser les fonctions définies par l'utilisateur de la base de données de JPQL
À partir de Spring Boot 0. Utilisez Spring CLI
Certification / autorisation avec Spring Security & Thymeleaf
Utilisation de cuda11.0 avec pytorch en utilisant Docker