Comprender Sling Model Exporter

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

Flujo de solicitud HTTP del modelo Sling tradicional

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

Se están desarrollando patrones comunes Sling Models AEM que representan componentes o páginas de la aplicación, y que utilizan la variable Sling Model objetos 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 del modelo Sling

  1. HTTP GET AEM Se realiza una solicitud de un recurso en la.

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

  2. Basado en el de la solicitud sling:resourceType, se resuelve la secuencia de comandos adecuada.

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

  4. La secuencia de comandos utiliza Sling Model para generar la representación del 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 como 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 "ordinario" Sling Model en JSON. El exportador Jackson, aunque bastante configurable, inspecciona en su núcleo el Sling Model y genera JSON utilizando cualquier método "getter" como claves JSON, y el getter devuelve valores como valores JSON.

La serialización directa de Sling Models les permite atender ambas solicitudes web normales con sus respuestas de HTML creadas con la versión tradicional Sling Model flujo de solicitud (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 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 de GET AEM HTTP se realiza para un recurso en el que se encuentra el selector y la extensión registrados con el recurso en el que se ha realizado la solicitud. Sling ModelEl exportador de.

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

  2. Sling resuelve el problema del recurso solicitado sling:resourceType, selector y extensión a un servlet de exportador de Sling generado dinámicamente, que se asigna al Sling Model con el exportador.

  3. El servlet del exportador de Sling resuelto invoca el Sling Model Exporter contra el Sling Model objeto adaptado de la solicitud o el recurso (tal como determinan los adaptables de los modelos Sling).

  4. El exportador serializa el Sling Model se basa en las anotaciones Opciones del exportador y Modelo Sling específico del exportador, y devuelve el resultado al servlet Exportador de Sling.

  5. El servlet del exportador Sling devuelve la representación JSON del Sling Model en la respuesta HTTP.

NOTE
Mientras que el proyecto Apache Sling proporciona el Exportador Jackson que serializa Sling Models En JSON, el marco Exportador también es compatible con los exportadores personalizados. Por ejemplo, un proyecto podría implementar un exportador personalizado que serialice un Sling Model en XML.
NOTE
No solo lo hace Sling Model Exporter serializar Sling Models, también puede exportarlos como objetos Java. La exportación a otros objetos Java no desempeña un papel en el flujo de solicitud HTTP y, por lo tanto, no aparece en el diagrama anterior.

Materiales de apoyo

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