Apache Sling Models 1.3.0 Einführung Sling Model Exporter, eine elegante Methode zum Exportieren oder Serialisieren Sling Model Objekte in benutzerdefinierte Abstraktionen. In diesem Artikel wird der traditionelle Anwendungsfall der Verwendung von Sling Models um HTL-Skripte zu füllen, wobei die Sling Model Exporter Framework zum Serialisieren eines Sling Model in JSON.
Der traditionelle Anwendungsfall für Sling Models ist es, eine geschäftliche Abstraktion für eine Ressource oder Anforderung bereitzustellen, die HTL-Skripte (oder zuvor JSPs) und eine Schnittstelle für den Zugriff auf Geschäftsfunktionen bereitstellt.
Allgemeine Muster entwickeln sich Sling Models , die AEM Komponenten oder Seiten darstellen und die Sling Model -Objekte, um die HTL-Skripte mit Daten zu versorgen, mit einem Endergebnis von HTML, das im Browser angezeigt wird.
HTTP GET Die Anfrage erfolgt für eine Ressource in AEM.
Beispiel: HTTP GET /content/my-resource.html
Basierend auf der Anforderungsressource sling:resourceType
, wird das entsprechende Skript aufgelöst.
Das Skript passt die Anforderung oder Ressource an die gewünschte Sling Model.
Das Skript verwendet die Sling Model -Objekt, um die HTML-Ausgabedarstellung zu generieren.
Die vom Skript generierte HTML wird in der HTTP-Antwort zurückgegeben.
Dieses traditionelle Muster funktioniert gut im Kontext der Erzeugung von HTML als Sling Model kann einfach über HTL genutzt werden. Das Erstellen strukturierterer Daten wie JSON oder XML ist ein weitaus aufwändigeres Unterfangen, da HTL sich nicht von selbst an die Definition dieser Formate weiterleitet.
Apache Sling Model Exporter enthält einen von Sling bereitgestellten Jackson Exporter, der automatisch ein "gewöhnliches"Element serialisiert Sling Model -Objekt in JSON. Der Jackson Exporter, auch wenn er recht konfigurierbar ist, überprüft in seinem Kern die Sling Model -Objekt und generiert JSON mithilfe beliebiger "Getter"-Methoden als JSON-Schlüssel und die Getter-Rückgabewerte als JSON-Werte.
Die direkte Serialisierung von Sling Models ermöglicht es ihnen, beide normalen Webanfragen mit ihren HTML-Antworten zu bedienen, die mit dem herkömmlichen Sling Model Anforderungsfluss (siehe oben), aber auch JSON-Ausgabedarstellungen verfügbar machen, die von Webdiensten 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 benutzerdefinierter Exporteure erfolgt im selben Fluss, jedoch mit ihrem Ausgabeformat.
HTTP-GET-Anfrage für eine Ressource in AEM mit dem Selektor und der Erweiterung, die beim Sling ModelExporter.
Beispiel: HTTP GET /content/my-resource.model.json
Sling löst die angeforderte Ressource auf sling:resourceType
, Selektor und Erweiterung auf ein dynamisch generiertes Sling Exporter Servlet, das dem Sling Model mit Exporter.
Das aufgelöste Sling Exporter Servlet ruft die Sling Model Exporter gegen Sling Model -Objekt, das von der Anforderung oder Ressource angepasst wurde (wie von den adaptiven Sling-Modellen bestimmt).
Der Ausführer serialisiert die Sling Model basierend auf den Exporter Options- und Exporter-spezifischen Sling Model-Anmerkungen und gibt das Ergebnis an das Sling Exporter Servlet zurück.
Das Sling Exporter Servlet gibt die JSON-Ausgabe der Sling Model in der HTTP-Antwort.
Während das Apache Sling-Projekt den Jackson Exporter bereitstellt, der serialisiert Sling Models nach JSON, unterstützt das Exporter-Framework auch benutzerdefinierte Exporter. Beispielsweise könnte ein Projekt einen benutzerdefinierten Exporter implementieren, der eine Sling Model in XML.
Nicht nur Sling Model Exporter serialize Sling Models, können sie auch als Java-Objekte exportiert werden. Der Export in andere Java-Objekte spielt im HTTP-Anforderungsfluss keine Rolle und erscheint daher nicht im obigen Diagramm.