Comprender Sling Model Exporter

Apache Sling Models 1.3.0 presenta Sling Model Exporter, una forma elegante de exportar o serializar objetos Sling Model en abstracciones personalizadas. Este artículo yuxtapone el caso de uso tradicional de usar Sling Models para rellenar scripts HTL, con el uso del marco Sling Model Exporter para serializar un Sling Model en JSON.

Flujo de solicitud HTTP del modelo tradicional de Sling

El caso de uso tradicional de Sling Models es proporcionar una abstracción del negocio para un recurso o solicitud, que proporciona scripts HTL (o, anteriormente JSP) una interfaz para acceder a funciones del negocio.

Los patrones comunes están desarrollando Sling Models que representan los componentes o páginas de AEM y utilizando los objetos Sling Model para alimentar los scripts HTL con datos, con un resultado final de HTML que se muestra en el explorador.

Flujo de solicitud HTTP del modelo Sling

Flujo de solicitud de modelo Sling

  1. HTTP GET La solicitud se realiza para un recurso en AEM.

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

  2. En función del sling:resourceType del recurso de solicitud, se resuelve el script correspondiente.

  3. El script adapta la solicitud o el recurso al Sling Model deseado.

  4. La secuencia de comandos utiliza el objeto Sling Model para generar la representación HTML.

  5. El HTML generado por el script se devuelve en la respuesta HTTP.

Este patrón tradicional funciona bien en el contexto de la generación de HTML, ya que el Sling Model se puede aprovechar fácilmente mediante HTL. Crear datos más estructurados como JSON o XML es un esfuerzo mucho más tedioso, ya que HTL no se presta naturalmente a la definición de estos formatos.

Sling Model Exporter Flujo de solicitud HTTP

Apache Sling Model Exporter viene con un exportador Jackson proporcionado por Sling que serializa automáticamente un objeto Sling Model "ordinario" en JSON. El exportador Jackson, aunque es bastante configurable, en su núcleo inspecciona el objeto Sling Model y genera JSON utilizando cualquier método "getter" como claves JSON, y los valores devueltos del captador como valores JSON.

La serialización directa de Sling Models les permite atender ambas solicitudes web normales con sus respuestas HTML creadas mediante el flujo de solicitud tradicional Sling Model (consulte más arriba), pero también exponer las representaciones JSON que pueden consumir los servicios web o las aplicaciones JavaScript.

Flujo de solicitud HTTP del exportador del modelo de Sling

Este flujo describe el flujo utilizando el exportador Jackson proporcionado para producir la salida JSON. El uso de exportadores personalizados sigue el mismo flujo pero con su formato de salida.

  1. La solicitud HTTP GET se realiza para un recurso en AEM con el selector y la extensión registrados con el exportador de Sling Model.

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

  2. Sling resuelve el sling:resourceType, selector y extensión del recurso solicitado en un Servlet Sling Exporter generado dinámicamente, que está asignado al Sling Model con Exporter.

  3. El Servlet del Exportador de Sling resuelto invoca el Sling Model Exporter con el objeto Sling Model adaptado de la solicitud o recurso (tal como determinan los adaptables de los Modelos Sling).

  4. El exportador serializa el Sling Model en función de las anotaciones del modelo de Sling de opciones del exportador y específicas del exportador y devuelve el resultado al servlet del exportador de Sling.

  5. El Servlet del Exportador de Sling devuelve la representación JSON del Sling Model en la respuesta HTTP.

NOTA

Aunque el proyecto Apache Sling proporciona el exportador Jackson que serializa Sling Models a JSON, el marco de exportación también admite exportadores personalizados. Por ejemplo, un proyecto podría implementar un Exportador personalizado que serialice un Sling Model en XML.

NOTA

No solo Sling Model Exporter serializa Sling Models, sino que también puede exportarlas como objetos Java. La exportación a otros objetos Java no tiene una función en el flujo de solicitudes HTTP y, por lo tanto, no aparece en el diagrama anterior.

Materiales de apoyo

En esta página