Entender Sling Model Exporter
O Apache Sling Models 1.3.0 apresenta o Sling Model Exporter, uma maneira elegante de exportar ou serializar objetos Sling Model em abstrações personalizadas. Este artigo justapõe o caso de uso tradicional do uso de Sling Models para preencher scripts HTL, com a utilização da estrutura Sling Model Exporter para serializar um Sling Model em JSON.
Fluxo de solicitação HTTP do modelo Sling tradicional
O caso de uso tradicional de Sling Models é fornecer uma abstração de negócios para um recurso ou solicitação, que fornece scripts HTL (ou, anteriormente JSPs) uma interface para acessar funções de negócios.
Padrões comuns são o desenvolvimento de Sling Models que representam Componentes ou Páginas AEM e o uso de objetos Sling Model para alimentar scripts HTL com dados, com um resultado final de HTML que é exibido no navegador.
Fluxo de solicitação HTTP do modelo Sling
-
HTTP GET Solicitação feita para um recurso no AEM.
Exemplo:
HTTP GET /content/my-resource.html
-
Com base no recurso de solicitação
sling:resourceType
, o Script apropriado é resolvido. -
O Script adapta a Solicitação ou Recurso ao Sling Model desejado.
-
O Script usa o objeto Sling Model para gerar a representação de HTML.
-
O HTML gerado pelo script é retornado na Resposta HTTP.
Esse padrão tradicional funciona bem no contexto da geração de HTML, pois o Sling Model pode ser facilmente aproveitado via HTL. Criar dados mais estruturados, como JSON ou XML, é uma tarefa muito mais tediosa, pois o HTL não se presta naturalmente à definição desses formatos.
Fluxo de solicitação HTTP Sling Model Exporter
O Apache Sling Model Exporter vem com um Exportador Jackson fornecido pelo Sling que serializa automaticamente um objeto Sling Model "comum" em JSON. O Exportador Jackson, embora bastante configurável, em seu núcleo inspeciona o objeto Sling Model e gera JSON usando quaisquer métodos "getter" como chaves JSON, e os valores de retorno de getter como valores JSON.
A serialização direta de Sling Models permite que eles atendam às solicitações normais da Web com suas respostas de HTML criadas usando o fluxo de solicitações Sling Model tradicional (veja acima), mas também expõem representações JSON que podem ser consumidas por serviços Web ou aplicativos JavaScript.
Este fluxo descreve o fluxo usando o Exportador Jackson fornecido para produzir a saída JSON. O uso de exportadores personalizados segue o mesmo fluxo, mas com seu formato de saída.
-
GET A Solicitação HTTP é feita para um recurso no AEM com o seletor e a extensão registrados com o Exportador do Sling Model.
Exemplo:
HTTP GET /content/my-resource.model.json
-
O Sling resolve o
sling:resourceType
, o seletor e a extensão do recurso solicitado para um Sling Exporter Servlet gerado dinamicamente, que é mapeado para o Sling Model com o Exportador. -
O Sling Exporter Servlet resolvido invoca o Sling Model Exporter contra o objeto Sling Model adaptado a partir da solicitação ou do recurso (conforme determinado pelos adaptáveis dos Modelos Sling).
-
O exportador serializa o Sling Model com base nas opções do exportador e nas anotações do modelo Sling específicas do exportador e retorna o resultado para o Sling Exporter Servlet.
-
O Sling Exporter Servlet retorna a representação JSON de Sling Model na Resposta HTTP.