--Utilisez le moteur de modèle Moustache avec Spring Boot --Cet environnement de vérification de fonctionnement: Java 14 (AdoptOpenJDK 14.0.2 + 12) + Spring Boot 2.3.2 + Gradle 6.5.1 + macOS Catalina
├── build.gradle
└── src
└── main
├── java
│ └── com
│ └── example
│ ├── SampleController.java
│ └── SampleData.java
└── resources
├── application.properties
└── templates
├── error
│ ├── 4xx.html
│ └── 5xx.html
└── my_template.html
build.gradle
Présentez Spring Boot Starter Mustache.
plugins {
id 'org.springframework.boot' version '2.3.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1'
sourceCompatibility = '14'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-mustache'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
[spring-boot-starter-moustache-2.3.2.RELEASE.pom](https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter-mustache/2.3.2.RELEASE/ Si vous regardez le contenu de spring-boot-starter-moustache-2.3.2.RELEASE.pom), vous pouvez voir que Spring Boot Starter Mustache utilise JMustache 1.15 de la bibliothèque Moustache.
src/main/resources/application.properties
Définissez les paramètres liés à Moustache. Ici, définissez spring.mustache.suffix pour traiter les fichiers avec l'extension html comme des fichiers modèles.
#Activer la mise en cache des modèles(Valeur par défaut: false)
spring.mustache.cache=false
#Encodage de modèle(Valeur par défaut: UTF-8)
spring.mustache.charset=UTF-8
#Préfixe appliqué au nom du modèle(Valeur par défaut: classpath:/templates/)
spring.mustache.prefix=classpath:/templates/
#Suffixe appliqué au nom du modèle(Valeur par défaut: .mustache)
spring.mustache.suffix=.html
Il existe d'autres éléments de configuration, donc si nécessaire, [Spring Boot Application Property List \ -Document](https://spring.pleiades.io/spring-boot/docs/current/reference/html/appendix-application-properties] .html) etc. doivent être référencés.
src/main/java/com/example/SampleController.java
Classe de contrôleur.
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
@SpringBootApplication
@Controller
public class SampleController {
public static void main(String[] args) {
SpringApplication.run(SampleController.class, args);
}
@GetMapping("/mypage")
public ModelAndView mypage() {
SampleData sampleData = new SampleData();
ModelAndView mav = new ModelAndView();
mav.setViewName("my_template"); //Nom du fichier de modèle
mav.addObject("mydata", sampleData); //Définir l'objet de données
return mav;
}
@GetMapping("/myerror")
public ModelAndView myerror() {
throw new RuntimeException("Signaler une erreur");
}
}
src/main/java/com/example/SampleData.java
Un objet de données à intégrer dans un modèle Moustache.
package com.example;
import java.util.List;
import java.util.Map;
public class SampleData {
public String foo = "foo";
public String getBar() {
return "bar";
}
public String[] strings = {"S1", "S2", "S3"};
public List list = List.of("L1", "L2", "L3");
public Map map = Map.of("key1", "value1", "key2", "value2", "key3", "value3");
}
src/main/resources/templates/my_template.html
Fichier de modèle de moustache pour afficher le contenu des objets de données.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{#mydata}}
foo: {{foo}}<br>
getBar(): {{bar}}<br>
{{/mydata}}
<br>
strings:<br>
{{#mydata.strings}}
value: {{.}}<br>
{{/mydata.strings}}
<br>
list:<br>
{{#mydata.list}}
value: {{.}}<br>
{{/mydata.list}}
<br>
map:<br>
{{#mydata.map}}
{{key1}}, {{key2}}, {{key3}}
{{/mydata.map}}
</body>
</html>
src/main/resources/templates/error/4xx.html
Fichier de modèle de moustache pour les erreurs de la série 4xx. Des données telles que des informations d'erreur peuvent être intégrées si nécessaire.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>4xx</title>
</head>
<body>
<h1>4xx</h1>
<div>timestamp: {{#timestamp}}{{.}}{{/timestamp}}</div>
<div>status: {{#status}}{{.}}{{/status}}</div>
<div>error: {{#error}}{{.}}{{/error}}</div>
<div>exception: {{#exception}}{{.}}{{/exception}}</div>
<div>message: {{#message}}{{.}}{{/message}}</div>
<div>errors: {{#errors}}{{.}}{{/errors}}</div>
<div>trace: {{#trace}}{{.}}{{/trace}}</div>
<div>path: {{#path}}{{.}}{{/path}}</div>
</body>
</html>
src/main/resources/templates/error/5xx.html
Fichier de modèle de moustache pour lorsqu'une erreur de la série 5xx se produit. Des données telles que des informations d'erreur peuvent être intégrées si nécessaire.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>5xx</title>
</head>
<body>
<h1>5xx</h1>
<div>timestamp: {{#timestamp}}{{.}}{{/timestamp}}</div>
<div>status: {{#status}}{{.}}{{/status}}</div>
<div>error: {{#error}}{{.}}{{/error}}</div>
<div>exception: {{#exception}}{{.}}{{/exception}}</div>
<div>message: {{#message}}{{.}}{{/message}}</div>
<div>errors: {{#errors}}{{.}}{{/errors}}</div>
<div>trace: {{#trace}}{{.}}{{/trace}}</div>
<div>path: {{#path}}{{.}}{{/path}}</div>
</body>
</html>
Accédez avec curl et vérifiez le résultat de la réponse.
L'objet de données est intégré dans le modèle et la sortie de Moustache.
$ curl http://localhost:8080/mypage
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
foo: foo<br>
getBar(): bar<br>
<br>
strings:<br>
value: S1<br>
value: S2<br>
value: S3<br>
<br>
list:<br>
value: L1<br>
value: L2<br>
value: L3<br>
<br>
map:<br>
value1, value2, value3
</body>
</html>
Les informations d'erreur sont incorporées et générées dans le fichier de modèle Moustache lorsqu'une erreur de la série 4xx se produit.
$ curl --include -H "accept: text/html" http://localhost:8080/
HTTP/1.1 404
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: text/html;charset=UTF-8
Content-Language: ja-JP
Content-Length: 321
Date: Fri, 07 Aug 2020 07:55:53 GMT
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>4xx</title>
</head>
<body>
<h1>4xx</h1>
<div>timestamp: Fri Aug 07 16:55:53 JST 2020</div>
<div>status: 404</div>
<div>error: Not Found</div>
<div>exception: </div>
<div>message: </div>
<div>errors: </div>
<div>trace: </div>
<div>path: /</div>
</body>
</html>
Les informations d'erreur sont intégrées et sorties dans le fichier de modèle Moustache lorsqu'une erreur système 5xx se produit.
$ curl --include -H "accept: text/html" http://localhost:8080/myerror
HTTP/1.1 500
Content-Type: text/html;charset=UTF-8
Content-Language: ja-JP
Content-Length: 340
Date: Fri, 07 Aug 2020 07:55:47 GMT
Connection: close
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>5xx</title>
</head>
<body>
<h1>5xx</h1>
<div>timestamp: Fri Aug 07 16:55:47 JST 2020</div>
<div>status: 500</div>
<div>error: Internal Server Error</div>
<div>exception: </div>
<div>message: </div>
<div>errors: </div>
<div>trace: </div>
<div>path: /myerror</div>
</body>
</html>
Guide «Comment utiliser» Spring Boot \ -Traduction japonaise du document officiel
Si vous utilisez Moustache, il existe également un MoustacheViewResolver nommé "moustacheViewResolver". Recherchez des ressources en insérant le nom de la vue entre des préfixes et des suffixes. Le préfixe est spring.mustache.prefix et le suffixe est spring.mustache.suffix. Les valeurs de préfixe et de suffixe par défaut sont respectivement "classpath: / templates /" et ".mustache". Vous pouvez remplacer MustacheViewResolver en fournissant un bean portant le même nom.
Recommended Posts