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-Anfragefluss des Sling-Modells

  1. HTTP GET-Anfrage erfolgt für eine Ressource in AEM.

    Beispiel: HTTP GET /content/my-resource.html

  2. Auf der Grundlage von sling:resourceType der Anfrageressource wird das entsprechende Skript aufgelöst.

  3. Das Skript passt die Anfrage oder Ressource an das gewünschte Sling Model an.

  4. Das Skript verwendet das Sling Model-Objekt, um die HTML-Ausgabedarstellung zu generieren.

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

HTTP-Anfragefluss des Sling-Modell-Exporters

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.

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

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

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

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

  5. Das Sling Exporter-Servlet gibt die JSON-Ausgabedarstellung von Sling Model in der HTTP-Antwort zurück.

NOTE
Das Apache Sling-Projekt stellt den Jackson Exporter zur Verfügung, der Sling Models in JSON serialisiert, aber das Exporter-Framework unterstützt auch benutzerdefinierte Exporter. Ein Projekt könnte zum Beispiel einen benutzerdefinierten Exporter implementieren, der Sling Model in XML serialisiert.
NOTE
Sling Model Exporter serialisiert Sling Models nicht nur, sondern kann sie auch als Java-Objekte exportieren. Der Export in andere Java-Objekte spielt im HTTP-Anfragefluss keine Rolle und erscheint daher nicht im obigen Diagramm.

Hilfsmaterialien

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6