Grundlegendes zum Sling Model Exporter
Apache Sling Models 1.3.0 führt den Sling Model Exporter ein, eine elegante Methode zum Exportieren oder Serialisieren von Sling Model-Objekten in benutzerdefinierte Abstraktionen. In diesem Artikel wird der traditionelle Anwendungsfall der Verwendung von Sling Models zum Ausfüllen von HTL-Skripten erläutert, wobei das Sling Model Exporter-Framework genutzt wird, um ein Sling Model in JSON zu serialisieren.
Traditioneller HTTP-Anfragefluss des Sling-Modells
Der traditionelle Anwendungsfall für Sling Models ist die Bereitstellung einer Geschäftsabstraktion für eine Ressource oder Anfrage, die HTL-Skripten (oder früher JSPs) eine Schnittstelle für den Zugriff auf Geschäftsfunktionen bietet.
Übliche Muster sind die Entwicklung von Sling Models, die AEM-Komponenten oder -Seiten darstellen, und die Verwendung der Sling Model-Objekte, um die HTL-Skripte mit Daten zu füttern, mit einem Endergebnis von HTML, das im Browser angezeigt wird.
HTTP-Anfragefluss des Sling-Modells
-
HTTP GET-Anfrage erfolgt für eine Ressource in AEM.
Beispiel:
HTTP GET /content/my-resource.html
-
Auf der Grundlage von
sling:resourceType
der Anfrageressource wird das entsprechende Skript aufgelöst. -
Das Skript passt die Anfrage oder Ressource an das gewünschte Sling Model an.
-
Das Skript verwendet das Sling Model-Objekt, um die HTML-Ausgabedarstellung zu generieren.
-
Die vom Skript generierte HTML wird in der HTTP-Antwort zurückgegeben.
Dieses herkömmliche Muster funktioniert gut im Zusammenhang mit der Erzeugung von HTML, da Sling Model leicht über HTL genutzt werden kann. Das Erstellen strukturierterer Daten wie JSON oder XML ist ein weitaus aufwändigeres Unterfangen, da sich HTL nicht von Natur aus für die Definition dieser Formate eignet.
Sling Model Exporter-HTTP-Anfragefluss
Apache Sling Model Exporter wird mit einem von Sling bereitgestellten Jackson Exporter ausgestattet, der ein „gewöhnliches“ Sling Model-Objekt automatisch in JSON serialisiert. Der Jackson Exporter ist zwar recht konfigurierbar, prüft aber im Kern das Sling Model-Objekt und erzeugt JSON unter Verwendung aller „Getter“-Methoden als JSON-Schlüssel und der Getter-Rückgabewerte als JSON-Werte.
Die direkte Serialisierung von Sling Models ermöglicht es ihnen, sowohl normale Web-Anfragen mit ihren HTML-Antworten zu bedienen, die mit dem herkömmlichen Sling Model-Anfragefluss (siehe oben) erstellt wurden, als auch JSON-Ausgabedarstellungen bereitzustellen, die von Web-Diensten oder JavaScript-Anwendungen genutzt werden können.
Dieser Fluss beschreibt den Fluss, der mit dem bereitgestellten Jackson Exporter zur JSON-Ausgabe verwendet wird. Die Verwendung von benutzerdefinierten Exportern folgt demselben Ablauf, jedoch mit einem anderen Ausgabeformat.
-
Eine HTTP-GET-Anfrage wird für eine Ressource in AEM mit dem Selektor und der Erweiterung gestellt, die mit dem Sling Model-Exporter registriert sind.
Beispiel:
HTTP GET /content/my-resource.model.json
-
Sling löst den
sling:resourceType
, den Selektor und die Erweiterung der angeforderten Ressource in ein dynamisch generiertes Sling Exporter-Servlet auf, das mit Exporter dem Sling Model zugeordnet wird. -
Das aufgelöste Sling Exporter-Servlet ruft den Sling Model Exporter für das Sling Model-Objekt auf, das von der Anfrage oder Ressource angepasst wurde (wie von den anpassbaren Sling-Modellen bestimmt).
-
Der Exporter serialisiert Sling Model auf der Grundlage der Exporter-Optionen und der Exporter-spezifischen Sling-Modell-Anmerkungen und gibt das Ergebnis an das Sling Exporter-Servlet zurück.
-
Das Sling Exporter-Servlet gibt die JSON-Ausgabedarstellung von Sling Model in der HTTP-Antwort zurück.