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