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.
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
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.
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.
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