[JAVA] Beispielcode, der die Moustache-Vorlagen-Engine mit Spring Boot verwendet

Überblick

--Verwenden Sie die Moustache Template Engine mit Spring Boot --Diese Umgebung zur Überprüfung von Vorgängen: Java 14 (AdoptOpenJDK 14.0.2 + 12) + Spring Boot 2.3.2 + Gradle 6.5.1 + macOS Catalina

Beispielcode

Quellcodeliste

├── 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

Führen Sie den Spring Boot Starter Moustache ein.

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/ Wenn Sie sich den Inhalt von Spring-Boot-Starter-Moustache-2.3.2.RELEASE.pom ansehen, können Sie sehen, dass Spring Boot Starter Moustache JMustache 1.15 der Moustache-Bibliothek verwendet.

src/main/resources/application.properties

Nehmen Sie Einstellungen für Moustache vor. Hier wird spring.mustache.suffix so festgelegt, dass eine Datei mit der Erweiterung html als Vorlagendatei behandelt wird.

#Gibt an, ob das Zwischenspeichern von Vorlagen aktiviert werden soll(Standardwert: false)
spring.mustache.cache=false

#Vorlagencodierung(Standardwert: UTF-8)
spring.mustache.charset=UTF-8

#Präfix auf Vorlagennamen angewendet(Standardwert: classpath:/templates/)
spring.mustache.prefix=classpath:/templates/

#Suffix auf Vorlagennamen angewendet(Standardwert: .mustache)
spring.mustache.suffix=.html

Es gibt andere Einstellungselemente, also bei Bedarf [Eigenschaftsliste der Spring Boot-Anwendung \ -Document](https://spring.pleiades.io/spring-boot/docs/current/reference/html/appendix-application-properties] .html) usw. sollte erwähnt werden.

src/main/java/com/example/SampleController.java

Controller-Klasse.

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"); //Name der Vorlagendatei
    mav.addObject("mydata", sampleData); //Datenobjekt setzen
    return mav;
  }

  @GetMapping("/myerror")
  public ModelAndView myerror() {
    throw new RuntimeException("Fehler auslösen");
  }
}

src/main/java/com/example/SampleData.java

Ein Datenobjekt, das in eine Moustache-Vorlage eingebettet werden soll.

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

Schnurrbart-Vorlagendatei zur Anzeige des Inhalts von Datenobjekten.

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

Schnurrbart-Vorlagendatei für 4xx-Serienfehler. Daten wie Fehlerinformationen können nach Bedarf eingebettet werden.

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

Schnurrbart-Vorlagendatei für den Fall, dass ein 5xx-Serienfehler auftritt. Daten wie Fehlerinformationen können nach Bedarf eingebettet werden.

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

Beispiel für das Ausgabeergebnis

Greifen Sie mit Curl zu und überprüfen Sie das Antwortergebnis.

Wenn die Antwort normal ist

Das Datenobjekt ist in die Moustache-Vorlage eingebettet und wird ausgegeben.

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

Wenn 404 nicht gefunden

Fehlerinformationen werden eingebettet und in die Moustache-Vorlagendatei ausgegeben, wenn ein Fehler der 4xx-Serie auftritt.

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

Wenn ein Fehler auftritt

Die Fehlerinformationen werden eingebettet und in die Moustache-Vorlagendatei ausgegeben, wenn ein 5xx-Systemfehler auftritt.

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

Referenzmaterial

Spring Boot "How to use" Anleitung \ -Japanische Übersetzung des offiziellen Dokuments

Wenn Sie Moustache verwenden, gibt es auch einen MoustacheViewResolver mit dem Namen "mustacheViewResolver". Suchen Sie nach Ressourcen, indem Sie den Ansichtsnamen in Präfixe und Suffixe einfügen. Das Präfix lautet spring.mustache.prefix und das Suffix ist spring.mustache.suffix. Die Präfix- und Suffixwerte sind standardmäßig "Klassenpfad: / templates /" bzw. ".mustache". Sie können MoustacheViewResolver überschreiben, indem Sie eine Bean mit demselben Namen angeben.

Recommended Posts

Beispielcode, der die Moustache-Vorlagen-Engine mit Spring Boot verwendet
Beispielcode mit JMustache, der Moustache-Vorlagen-Engine in Java
Beispiel einer Webanwendung, die mit Spring Boot 1.5 mehrere Datenbanken verwaltet
Schreiben Sie den Testcode mit Spring Boot
Führen Sie ein Spring Boot-Projekt mit VS-Code aus
Zeigen Sie die Gradle-Aufgabe im Spring Boot-Projekt an
Beispielcode für die DB-Steuerung durch deklarative Transaktion mit Spring Boot + Spring Data JPA
Holen Sie sich im Frühjahr mehrere Ressourcen, die dem Muster entsprechen
Geben Sie die statische Ressourcencodierung in Spring Boot an
Code, der nur die in der Verarbeitung integrierte Kamera anzeigt
Verzweigungsverarbeitung mit dem Rückgabewert von RestTemplate und dem Statuscode von ResponseEntity in Spring Boot
Spring Boot 1.x wird im nächsten Jahr EOL erreichen.
Beschleunigen Sie das Testen von Validatoren, für die DI im Spring Boot erforderlich ist
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Legen Sie den Kontextparameter in Spring Boot fest
Spring Boot 2 Multiprojekt mit Gradle
Wichtige Änderungen in Spring Boot 1.5
NoHttpResponseException in Spring Boot + WireMock
Beachten Sie, dass die Standardeinstellung für die Spring-Boot-Umleitung http ist
Rufen Sie in Spring Boot eine Proxy-Instanz der Komponente selbst ab
[Spring Boot] Verspotten Sie die Inhalte, die außerhalb des Bereichs automatisch verdrahtet werden. [JUnit 5]
Siehe das relative Umleitungsverhalten mit der Einstellung server.tomcat.use-relative-redirects in Spring Boot
Verwenden Sie eine Beispieldomäne für den Paketnamen im Beispielcode
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Beispielcode zum Testen eines Spring Boot-Controllers mit MockMvc
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
Schreiben wir einen Testcode für die Anmeldefunktion mit Spring Boot
[Spring Boot] Bis @Autowired in der Testklasse [JUnit5] ausgeführt wird
Formular, das den Wert des sich wiederholenden Elements in Spring MVC erhält
[Spring Boot] Liste der Validierungsregeln, die in der Eigenschaftendatei für Fehlermeldungen verwendet werden können
Spring Boot-Anwendungsentwicklung in Eclipse
Überprüfungspunkte für den Spring Boot-Anwendungscode
Spring Boot zum ersten Mal
Java Spring-Umgebung in vs Code
Spring Boot: Restful API-Beispielprojekt
Spring Boot Programmierung mit VS Code
Implementieren Sie die REST-API mit Spring Boot
Was ist @Autowired im Spring Boot?
Implementieren Sie die Spring Boot-Anwendung in Gradle
Ein Memo, das Spring Boot berührte
Verwendung von Thymeleaf mit Spring Boot
Eine Geschichte über ein in Java geschriebenes Spring Boot-Projekt, das Kotlin unterstützt
Autowired-Felder in einer Klasse, die TextWebSocketHandler in Spring Boot erbt, werden NULL
Schritte zum Ausführen von Spring Boot beziehen sich auf die Werte in der Eigenschaftendatei
Ich habe Docker verwendet, um die Vorlage zu verfestigen, die mit Spring Boot entwickelt werden soll.
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
Mein Memorandum, dass ich ValidationMessages.properties UTF8 in Spring Boot erstellen möchte
[Java] Implementieren Sie eine Funktion, die eine im Builder-Muster implementierte Klasse verwendet