[JAVA] Verwenden Sie Thymeleaf mit Azure-Funktionen

Ich denke, dass es üblich ist, JSON zurückzugeben, wenn es ohne Server ist, aber HTML kann auch zurückgegeben werden. Ohne die Template-Engine wäre das Erstellen von HTML ein Problem. Deshalb habe ich versucht, herauszufinden, ob Thymeleaf verwendet werden kann.

Annahme

Grundsätzlich wird davon ausgegangen, dass die Umgebung wie folgt aufgebaut ist. (Es ist in Ordnung, wenn Sie ein Projekt aus Mavens Archetyp erstellen.) https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-create-first-java-maven

Zunächst ein Beispiel für die einfache Rückgabe von 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>Nimm es</title></head><body><h1>Bode</h1></body></html>";
        HttpResponseMessage<String> res = req.createResponse(200, html);
        res.addHeader("Content-Type", "text/html");

        return res;
    }
}

Stellen Sie das HTML selbst zusammen und geben Sie es mit dem Typ HttpResponseMessage zurück. Wenn Sie Content-Type zu diesem Zeitpunkt nicht mit addHeader auf text / html setzen, erkennt der Browser dies nur als Zeichenfolge.

Es wäre schön, wenn das HTML so einfach wäre, aber ich würde gerne Thymeleaf verwenden, weil es schmerzhaft sein kann, wenn es kompliziert wird oder dynamische Elemente erscheinen.

Verwenden Sie Thymeleaf

Fügen Sie zunächst thymeleaf zur Abhängigkeit von pom.xml hinzu. Die Version ist zu diesem Zeitpunkt aktuell.

pom.xml


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

Dann die Quelle.

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

Normalerweise verwende ich es mit Spring, daher war ich mir dessen nicht wirklich bewusst, aber es gibt verschiedene Arten von Template Resolver. Dieses Mal verwenden wir ClassLoaderTemplateResolver.

Um den Wert an die Thymeleaf-Seite zu übergeben, muss ein Kontextobjekt erstellt werden. Ich denke, es ist wie ein Model im Frühling.

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>

Ich habe HTML so gemacht. Es befindet sich in src / main / resources / template.

Danach können Sie es starten, bereitstellen und den Vorgang überprüfen.

Impressionen

Dieses Mal wird eine Thymeleaf-bezogene Instanz in der Methode erstellt. Es ist jedoch möglicherweise besser, sie im Konstruktor auszuführen und als Instanzvariable festzulegen. Es ist jedoch nicht sinnvoll, wenn der Konstruktor bei jedem Zugriff ausgeführt wird. Wenn es ohne Server ist, verstehe ich die Funktionsweise hier nicht, daher denke ich, dass ich sie eines Tages überprüfen muss.

Ich bin auch der Meinung, dass Sie es mit Spring Boot schnell schaffen sollten, wenn Sie dies bisher tun. Wenn es ohne Server ist, verfügt es über eine automatische Skalierungsfunktion. Daher ist es ein Vorteil, dass Sie diese nutzen können.

Recommended Posts

Verwenden Sie Thymeleaf mit Azure-Funktionen
Verwenden Sie Azure Bing SpellCheck mit Java
Verwenden Sie Java 11 mit Google Cloud-Funktionen
Verwenden Sie ProGuard mit Gradle
Azure funktioniert in Java
Verwenden Sie Puphpeteer mit Docker
Verwenden Sie XVim2 mit Xcode 12.0.1
Verwenden von CentOS mit LXD
Verwenden Sie Webmock mit Rspec
Verwenden Sie WebJars mit Gradle
Generieren Sie JavaScript mit Thymeleaf
Verwenden Sie jlink mit gradle
Verwenden Sie die aggregierte Abfrage (Anzahl) mit dem Azure CosmosDB Java SDK
Adressiert, da Azure-Funktionen in Java nicht mehr funktionieren
Verwenden Sie Lambda-Ebenen mit Java
Verwenden Sie GDAL mit Python mit Docker
Verwenden Sie das pfx-Zertifikat mit Okhttp3
Verwenden Sie die Bulk-API mit RestHighLevelClient
Verwenden Sie SDKMAN! Mit Git Bash
Erstellen Sie Azure-Funktionen in Java
Verwenden Sie mit Rails 6.0 mehrere Datenbanken
Verwenden Sie thymeleaf3 mit parent, ohne Spring-Boot-Starter-Parent in Spring Boot anzugeben
Verwenden Sie Spring JDBC mit Spring Boot
Verwenden Sie Ruby mit Google Colab
Verwenden Sie SpatiaLite mit Java / JDBC
Verwenden Sie log4j2 mit YAML + Gradle
[Docker] Wird immer mit Docker + Rails verwendet
Verwenden Sie PlantUML mit Visual Studio Code
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Verwenden Sie Java mit MSYS und Cygwin
Implementieren Sie einen Textlink mit Springboot + Thymeleaf
Verwenden Sie den Konstruktor mit Argumenten in cucumber-picocontainer
Verwenden Sie Microsoft Graph mit Standard-Java
Verwenden Sie den PostgreSQL-Inet-Typ mit DbUnit
Verwenden Sie Bootstrap 4 mit PlayFramework 2.6 (kein CDN)
Verwenden von Git mit SourceTree und Eclipse
Verwenden Sie JDBC mit Java und Scala.
Verwenden Sie DataDog APM mit nicht unterstützten Frameworks
Wie man mssql-tools mit alpine benutzt
Verwenden Sie benutzerdefinierte Datenbankfunktionen von JPQL
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Verwenden von cuda11.0 mit pytorch mit Docker