Komponenten können angepasst werden, um einen JSON-Export ihrer Inhalte basierend auf einem Modeler-Framework zu generieren.
Der JSON-Export basiert auf Sling-Modellen und auf dem Framework des Sling Model Exporter (der sich wiederum auf Jackson-Anmerkungen stützt).
Das bedeutet, dass die Komponente über ein Sling-Modell verfügen muss, wenn sie JSON exportieren muss. Daher müssen Sie diese beiden Schritte ausführen, um den JSON-Export für jede Komponente zu aktivieren.
Zunächst muss ein Sling-Modell für die Komponente definiert werden.
Ein Beispiel für die Verwendung von Sling-Modellen finden Sie im Artikel Entwickeln von Sling Model Exportern in AEM.
Die Implementierungsklasse des Sling-Modells muss wie folgt kommentiert werden:
@Model(... adapters = {..., ComponentExporter.class})
@Exporter(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME, extensions = ExporterConstants.SLING_MODEL_EXTENSION)
@JsonSerialize(as = MyComponent.class)
Dadurch wird sichergestellt, dass Ihre Komponente mit dem .model
-Selektor und der .json
-Erweiterung eigenständig exportiert werden kann.
Außerdem kann die Sling-Modell-Klasse dadurch in der ComponentExporter
-Oberfläche übernommen werden.
Jackson-Anmerkungen werden normalerweise nicht auf der Ebene der Sling-Modell-Klasse, sondern auf der Ebene der Modell-Oberfläche angegeben. Dadurch soll sichergestellt werden, dass der JSON-Export als Teil der Komponenten-API betrachtet wird.
Die Klassen ExporterConstants
und ComponentExporter
stammen aus dem com.adobe.cq.export.json
-Paket.
Obwohl dies kein Standardnutzungsszenario ist, können zusätzlich zum model
-Selektor mehrere Selektoren konfiguriert werden.
https://<server>:<port>/content/page.model.selector1.selector2.json
In einem solchen Fall muss der model
-Selektor jedoch der erste Selektor und .json
die Erweiterung sein.
Damit sie im JSON Exporter-Framework beachtet wird, sollte die ComponentExporter
-Oberfläche (oder ContainerExporter
bei Container-Komponenten) in der Modelloberfläche implementiert werden.
Für die entsprechende Sling-Modell-Oberfläche (MyComponent
) wird in diesem Fall über Jackson-Anmerkungen definiert, wie sie exportiert (serialisiert) werden soll.
Es müssen die richtigen Anmerkungen für die Modell-Oberfläche angewendet werden, um zu definieren, welche Methoden serialisiert werden sollen. Standardmäßig werden alle Methoden, die die übliche Benennungskonvention für Getter einhalten, serialisiert und leiten ihre JSON-Eigenschaftsnamen natürlich von den Getter-Namen ab. Um dies zu vermeiden bzw. zu überschreiben, benennen Sie die JSON-Eigenschaft mit @JsonIgnore
oder @JsonProperty
um.
Die Kernkomponenten unterstützen den JSON-Export und können als Referenz verwendet werden.
Ein Beispiel ist die Sling-Modell-Implementierung der Bild-Kernkomponente und deren kommentierte Oberfläche.
Weitere Informationen finden Sie unter: