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 Sling tradicional
El caso de uso tradicional de Sling Models es proporcionar una abstracción empresarial para un recurso o una solicitud, lo que proporciona secuencias de comandos HTL (o, anteriormente JSP) una interfaz para acceder a funciones empresariales.
Hay patrones comunes que desarrollan Sling Models que representan componentes o páginas de AEM y que utilizan 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
-
HTTP GET: se ha realizado una solicitud para un recurso en AEM.
Ejemplo:
HTTP GET /content/my-resource.html
-
En función de
sling:resourceType
del recurso de solicitud, se resuelve el script apropiado. -
El script adapta la solicitud o el recurso al Sling Model deseado.
-
La secuencia de comandos utiliza el objeto Sling Model para generar la representación de HTML.
-
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 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.
Flujo de solicitud HTTP Sling Model Exporter
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 bastante configurable, inspecciona en su núcleo el objeto Sling Model y genera JSON utilizando cualquier método "captador" como claves JSON, y los valores devueltos por captador como valores JSON.
La serialización directa de Sling Models les permite atender solicitudes web normales con sus respuestas de HTML creadas mediante el flujo de solicitud tradicional de Sling Model (ver arriba), pero también exponer representaciones JSON que pueden consumir los servicios web o las aplicaciones JavaScript.
Este flujo describe el flujo utilizando el exportador Jackson proporcionado para generar la salida JSON. El uso de exportadores personalizados sigue el mismo flujo pero con su formato de salida.
-
La solicitud HTTP GET se realiza para un recurso de AEM con el selector y la extensión registrados en el exportador de Sling Model.
Ejemplo:
HTTP GET /content/my-resource.model.json
-
Sling resuelve el
sling:resourceType
, el selector y la extensión del recurso solicitado en un servlet de exportador de Sling generado dinámicamente, que se asigna al Sling Model con el exportador. -
El servlet del exportador de Sling resuelto invoca el Sling Model Exporter contra el objeto Sling Model adaptado de la solicitud o el recurso (según lo determinado por los adaptables de los modelos de Sling).
-
El exportador serializa Sling Model en función de las anotaciones Opciones del exportador y Modelo Sling específico del exportador y devuelve el resultado al servlet Exportador de Sling.
-
El servlet del exportador de Sling devuelve la representación JSON de Sling Model en la respuesta HTTP.