Comprendere Sling Model Exporter

Apache Sling Models 1.3.0 introduce Sling Model Exporter, un modo elegante per esportare o serializzare Sling Model oggetti in astrazioni personalizzate. Questo articolo giustappone il caso d'uso tradizionale di utilizzo di Sling Models per popolare gli script HTL, sfruttando il framework Sling Model Exporter per serializzare un Sling Model in JSON.

Flusso di richieste HTTP del modello Sling tradizionale

Il caso d'uso tradizionale per Sling Models consiste nel fornire un'astrazione aziendale per una risorsa o una richiesta, che fornisce script HTL (o in precedenza JSP) un'interfaccia per l'accesso alle funzioni aziendali.

I pattern comuni sono lo sviluppo di Sling Models che rappresentano componenti o pagine AEM e l'utilizzo di oggetti Sling Model per alimentare gli script HTL con i dati, con un risultato finale di HTML visualizzato nel browser.

Flusso richiesta HTTP modello Sling

Flusso richiesta modello Sling

  1. HTTP GET richiesta effettuata per una risorsa in AEM.

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

  2. In base al valore sling:resourceType della risorsa della richiesta, viene risolto lo script appropriato.

  3. Lo script adatta la richiesta o la risorsa al Sling Model desiderato.

  4. Lo script utilizza l'oggetto Sling Model per generare la rappresentazione HTML.

  5. Il HTML generato dallo script viene restituito nella risposta HTTP.

Questo modello tradizionale funziona bene nel contesto della generazione di HTML, in quanto Sling Model può essere facilmente sfruttato tramite HTL. La creazione di dati più strutturati, come JSON o XML, è un’operazione molto più noiosa in quanto HTL non si presta naturalmente alla definizione di questi formati.

Sling Model Exporter flusso di richieste HTTP

Apache Sling Model Exporter viene fornito con Jackson Exporter fornito da Sling che serializza automaticamente un oggetto Sling Model "ordinario" in JSON. Jackson Exporter, pur essendo configurabile, analizza l'oggetto Sling Model e genera JSON utilizzando qualsiasi metodo "getter" come chiavi JSON, mentre il getter restituisce valori come valori JSON.

La serializzazione diretta di Sling Models consente 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 rappresentazioni JSON che possono essere utilizzate dai servizi Web o dalle applicazioni JavaScript.

Flusso richiesta HTTP esportazione modello Sling

Questo flusso descrive il flusso che utilizza il programma di esportazione Jackson fornito per produrre l'output JSON. L'utilizzo di esportatori personalizzati segue lo stesso flusso ma con il relativo formato di output.

  1. Richiesta HTTP GET per una risorsa in AEM con il selettore e l'estensione registrati con l'utilità di esportazione di Sling Model.

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

  2. Sling risolve il selettore sling:resourceType e l'estensione della risorsa richiesta in un servlet di esportazione Sling generato in modo dinamico, mappato a Sling Model con Exporter.

  3. Il servlet di esportazione Sling risolto richiama Sling Model Exporter rispetto all'oggetto Sling Model adattato dalla richiesta o dalla risorsa (come determinato dagli adattatori modelli Sling).

  4. L'esportatore serializza Sling Model in base alle annotazioni del modello Sling Exporter e alle opzioni Exporter e restituisce il risultato al servlet Sling Exporter.

  5. Il servlet di esportazione Sling restituisce il rendering JSON di Sling Model nella risposta HTTP.

NOTE
Sebbene il progetto Apache Sling fornisca il Jackson Exporter che serializza Sling Models in JSON, il framework Exporter supporta anche gli Exporter personalizzati. Ad esempio, un progetto potrebbe implementare un modulo di esportazione personalizzato che serializza Sling Model in XML.
NOTE
Non solo Sling Model Exporter serializza Sling Models, ma può anche esportarli come oggetti Java. L’esportazione in altri oggetti Java non svolge un ruolo nel flusso di richieste HTTP e pertanto non viene visualizzata nel diagramma precedente.

Materiali di supporto

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6