Comprendre Sling Model Exporter

Apache Sling Models 1.3.0 introduit Sling Model Exporter, un moyen élégant d’exporter ou de sérialiser des objets Sling Model dans des abstractions personnalisées. Cet article juxtapose le cas d’utilisation traditionnel de l’utilisation de Sling Models pour renseigner les scripts HTL, en utilisant la structure Sling Model Exporter pour sérialiser une Sling Model dans JSON.

Flux de requête HTTP Sling Model traditionnel

Le cas d’utilisation traditionnel de Sling Models consiste à fournir une abstraction commerciale pour une ressource ou une requête, qui fournit des scripts HTL (ou, précédemment, des JSP) une interface pour l’accès aux fonctions métier.

Les modèles courants sont en train de développer Sling Models qui représentent AEM composants ou pages, et d’utiliser les objets Sling Model pour alimenter les scripts HTL avec des données, avec un résultat final de code HTML affiché dans le navigateur.

Flux de requête HTTP de modèle Sling

Flux de requête de modèle Sling

  1. HTTP GET La demande est faite pour une ressource dans AEM.

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

  2. En fonction de sling:resourceType de la ressource de requête, le script approprié est résolu.

  3. Le script adapte la requête ou la ressource à la Sling Model souhaitée.

  4. Le script utilise l’objet Sling Model pour générer le rendu HTML.

  5. Le code HTML généré par le script est renvoyé dans la réponse HTTP.

Ce modèle traditionnel fonctionne bien dans le contexte de la génération de code HTML, car la fonction Sling Model peut être facilement exploitée via HTL. La création de données plus structurées telles que JSON ou XML est une tâche beaucoup plus fastidieuse, car HTL ne se prête pas naturellement à la définition de ces formats.

Sling Model Exporter Flux de requête HTTP

Apache Sling Model Exporter est fourni avec un exportateur Jackson fourni par Sling qui sérialise automatiquement un objet Sling Model "ordinaire" dans JSON. L’exportateur Jackson, bien que configurable, à son coeur inspecte l’objet Sling Model et génère JSON en utilisant n’importe quelle méthode "getter" comme clés JSON, et les valeurs de retour getter comme valeurs JSON.

La sérialisation directe de Sling Models leur permet de traiter à la fois des requêtes Web normales avec leurs réponses HTML créées à l’aide du flux de requêtes Sling Model traditionnel (voir ci-dessus), mais aussi d’exposer des rendus JSON pouvant être utilisés par des services Web ou des applications JavaScript.

Flux de requête HTTP Sling Model Exporter

Ce flux décrit le flux à l’aide de l’exportateur Jackson fourni pour produire la sortie JSON. L'utilisation d'exportateurs personnalisés suit le même flux mais avec leur format de sortie.

  1. Une requête de GET HTTP est faite pour une ressource en AEM avec le sélecteur et l’extension enregistrés auprès de l’exportateur Sling Model.

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

  2. Sling résout le sling:resourceType, le sélecteur et l’extension de la ressource demandée en un servlet d’exportateur Sling généré dynamiquement, qui est mappé sur la Sling Model avec l’exportateur.

  3. Le servlet Sling Exporter résolu appelle la balise Sling Model Exporter par rapport à l’objet Sling Model adapté de la requête ou de la ressource (tel que déterminé par les modèles Sling adaptables).

  4. L’exportateur sérialise le Sling Model en fonction des annotations de modèle Sling spécifiques à l’exportateur et renvoie le résultat au servlet d’exportateur Sling.

  5. Le servlet d’exportateur Sling renvoie le rendu JSON de Sling Model dans la réponse HTTP.

REMARQUE

Bien que le projet Apache Sling fournisse l’exportateur Jackson qui sérialise Sling Models vers JSON, la structure d’exportateur prend également en charge les exportateurs personnalisés. Par exemple, un projet peut implémenter un exportateur personnalisé qui sérialise Sling Model en XML.

REMARQUE

Sling Model Exporter serialize Sling Models, il peut également les exporter en tant qu’objets Java. L’export vers d’autres objets Java ne joue pas de rôle dans le flux de requête HTTP et n’apparaît donc pas dans le diagramme ci-dessus.

Documents annexes

Sur cette page