Sling Model Exporter verstehen

Apache Sling Models 1.3.0 führt Sling Model Exporter ein, eine elegante Methode zum Exportieren oder Serialisieren von Sling Model-Objekten in benutzerdefinierte Abstraktionen. Dieser Artikel stellt den herkömmlichen Anwendungsfall dar, bei dem Sling Models zum Ausfüllen von HTL-Skripten verwendet wird, wobei das Sling Model Exporter-Framework genutzt wird, um ein Sling Model in JSON zu serialisieren.

Herkömmlicher HTTP-Anforderungsfluss des Sling-Modells

Der herkömmliche Anwendungsfall für Sling Models besteht darin, eine geschäftliche Abstraktion für eine Ressource oder Anforderung bereitzustellen, die HTL-Skripte (oder zuvor JSPs) eine Schnittstelle für den Zugriff auf Geschäftsfunktionen bereitstellt.

Häufige 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 versehen, mit einem Endergebnis von HTML, das im Browser angezeigt wird.

Sling Model HTTP Request Flow

Sling Model Request Flow

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

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

  2. Basierend auf sling:resourceType der Anforderungsressource wird das entsprechende Skript aufgelöst.

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

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

  5. Der vom Skript generierte HTML-Code wird in der HTTP-Antwort zurückgegeben.

Dieses traditionelle Muster funktioniert gut im Kontext der HTML-Generierung, da Sling Model einfach über HTL genutzt werden kann. 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.

Sling Model Exporter HTTP-Anforderungsfluss

Apache Sling Model Exporter enthält einen von Sling bereitgestellten Jackson Exporter, der automatisch ein "gewöhnliches" Sling Model-Objekt in JSON serialisiert. Der Jackson Exporter ist zwar relativ konfigurierbar, prüft aber im Kern das Sling Model -Objekt und generiert JSON mithilfe beliebiger "Getter"-Methoden als JSON-Schlüssel und den Getter-Rückgabewerten 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 Anforderungsfluss Sling Model erstellt wurden (siehe oben), aber auch JSON-Ausgabedarstellungen verfügbar zu machen, die von Webdiensten oder JavaScript-Anwendungen genutzt werden können.

HTTP-Anforderungsfluss des Sling Model Exporters

Dieser Fluss beschreibt den Fluss, der mit dem bereitgestellten Jackson Exporter zur JSON-Ausgabe verwendet wird. Die Verwendung benutzerdefinierter Exporteure folgt demselben Fluss, jedoch mit dem Ausgabeformat.

  1. HTTP-GET-Anfragen werden für eine Ressource in AEM mit dem Selektor und der Erweiterung durchgeführt, die beim Exporter von Sling Model registriert sind.

    Beispiel: HTTP GET /content/my-resource.model.json

  2. Sling löst den Selektor und die Erweiterung der angeforderten Ressource sling:resourceType in ein dynamisch generiertes Sling Exporter Servlet auf, das dem Sling Model mit Exporter zugeordnet ist.

  3. Das aufgelöste Sling Exporter Servlet ruft das Sling Model Exporter-Objekt gegen das Sling Model-Objekt auf, das aus der Anforderung oder Ressource angepasst wurde (wie durch die adaptiven Sling-Modelle bestimmt).

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

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

HINWEIS

Während das Apache Sling-Projekt den Jackson Exporter bereitstellt, der Sling Models für JSON serialisiert, unterstützt das Exporter-Framework auch benutzerdefinierte Exporter. Beispielsweise könnte ein Projekt einen benutzerdefinierten Exporter implementieren, der einen Sling Model in XML serialisiert.

HINWEIS

Sling Model Exporter serialize Sling Models kann 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.

Unterstützende Materialien

Auf dieser Seite