Apache Sling Models 1.3.0 introduce Sling Model Exporter, un modo elegante per esportare o serializzare gli oggetti Sling Model in astrazioni personalizzate. Questo articolo sovrappone il tradizionale caso d’uso dell’utilizzo di Sling Models per popolare gli script HTL, sfruttando il framework Sling Model Exporter per serializzare un Sling Model in JSON.
Il caso d’uso tradizionale di Sling Models è quello di fornire un’astrazione aziendale per una risorsa o una richiesta, che fornisce script HTL (o, in precedenza, JSP) un’interfaccia per accedere alle funzioni aziendali.
I pattern comuni stanno sviluppando Sling Models che rappresentano i componenti o le pagine AEM e utilizzano gli oggetti Sling Model per alimentare gli script HTL con i dati, con un risultato finale di HTML visualizzato nel browser.
HTTP GET La richiesta viene effettuata per una risorsa in AEM.
Esempio: HTTP GET /content/my-resource.html
In base al sling:resourceType
della risorsa della richiesta, lo script appropriato viene risolto.
Lo script adatta la richiesta o la risorsa alla Sling Model desiderata.
Lo script utilizza l'oggetto Sling Model per generare il rendering HTML.
Il codice HTML generato dallo script viene restituito nella risposta HTTP.
Questo modello tradizionale funziona bene nel contesto della generazione di HTML, in quanto il Sling Model può essere facilmente sfruttato tramite HTL. Creare dati più strutturati come JSON o XML è un’impresa molto più noiosa in quanto HTL non si presta naturalmente alla definizione di questi formati.
Apache Sling Model Exporter viene fornito con uno Sling fornito Jackson Exporter che serializza automaticamente un oggetto "ordinario" Sling Model in JSON. L'esportatore Jackson, pur essendo abbastanza configurabile, al suo centro controlla l'oggetto Sling Model e genera JSON utilizzando qualsiasi metodo "getter" come chiave JSON e i valori restituiti get come valori JSON.
La serializzazione diretta di Sling Models consente loro di soddisfare entrambe le normali richieste web con le risposte HTML create utilizzando il flusso di richieste Sling Model tradizionale (vedi sopra), ma anche di esporre le rappresentazioni JSON che possono essere utilizzate da servizi web o applicazioni JavaScript.
Questo flusso descrive il flusso utilizzando l'esportatore Jackson fornito per produrre l'output JSON. L'uso di esportatori personalizzati segue lo stesso flusso ma con il loro formato di output.
HTTP GET Request viene fatto per una risorsa in AEM con il selettore e l’estensione registrati con l’esportatore di Sling Model.
Esempio: HTTP GET /content/my-resource.model.json
Sling risolve il selettore e l’estensione della risorsa richiesta sling:resourceType
in un servlet Sling Exporter generato in modo dinamico, mappato su Sling Model con Exporter.
Il servlet Sling Exporter risolto richiama il Sling Model Exporter rispetto all'oggetto Sling Model adattato dalla richiesta o dalla risorsa (come determinato dalle tabelle di adattamento dei modelli Sling).
L’esportatore serializza il Sling Model in base alle opzioni di esportazione e alle annotazioni del modello Sling specifiche per l’esportatore e restituisce il risultato al servlet Sling Exporter.
Il servlet Sling Exporter restituisce il rendering JSON del Sling Model nella risposta HTTP.
Mentre il progetto Apache Sling fornisce l'esportatore Jackson che serializza Sling Models a JSON, il framework Exporter supporta anche gli esportatori personalizzati. Ad esempio, un progetto potrebbe implementare un esportatore personalizzato che serializza un Sling Model in XML.
Non solo Sling Model Exporter serialize Sling Models, può anche esportarli come oggetti Java. L’esportazione in altri oggetti Java non svolge un ruolo nel flusso di richieste HTTP e quindi non viene visualizzata nel diagramma precedente.