Komponenter kan anpassas för att generera JSON-export av deras innehåll baserat på ett modellramverk.
JSON-exporten baseras på Sling Modelsoch på Export av försäljningsmodell som i sig förlitar sig på Jackson annotations).
Det innebär att komponenten måste ha en Sling-modell om den måste exportera JSON. Följ därför de här två stegen för att aktivera JSON-export för alla komponenter.
Först måste en segmentmodell definieras för komponenten.
Ett exempel på hur du använder modeller finns i artikeln Utveckla export av försäljningsmodeller i AEM.
Implementeringsklassen för Sling-modellen måste kommenteras med följande:
@Model(... adapters = {..., ComponentExporter.class})
@Exporter(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME, extensions = ExporterConstants.SLING_MODEL_EXTENSION)
@JsonSerialize(as = MyComponent.class)
Detta garanterar att din komponent kan exporteras fristående med .model
väljaren och .json
tillägg.
Dessutom anger detta att klassen Sling Model kan anpassas till ComponentExporter
gränssnitt.
Jackson-anteckningar anges vanligtvis inte på klassnivå för Sling Model, utan på gränssnittsnivå för Model. Detta för att säkerställa att JSON-exporten betraktas som en del av komponent-API:t.
The ExporterConstants
och ComponentExporter
klasserna kommer från com.adobe.cq.export.json
paket.
Även om det inte är ett standardanvändningsfall är det möjligt att konfigurera flera väljare förutom model
väljare.
https://<server>:<port>/content/page.model.selector1.selector2.json
I sådana fall gäller dock att model
måste vara den första väljaren och tillägget måste vara .json
.
Modellgränssnittet bör implementera ComponentExporter
gränssnitt (eller ContainerExporter
, för behållarkomponenter).
Motsvarande Sling Model-gränssnitt (MyComponent
) kommenteras sedan med Jackson annotations för att definiera hur den ska exporteras (serialiseras).
Modellgränssnittet måste vara korrekt kommenterat för att definiera vilka metoder som ska serialiseras. Som standard serialiseras alla metoder som respekterar den vanliga namnkonventionen för get-ters och härleder deras JSON-egenskapsnamn naturligt från get-namnen. Detta kan förhindras eller åsidosättas med @JsonIgnore
eller @JsonProperty
för att byta namn på JSON-egenskapen.
Kärnkomponenterna stöder JSON-export och kan användas som referens.
Ett exempel finns i Sling Model-implementeringen av Image Core-komponenten och dess kommenterade gränssnitt.