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 estão desenvolvendo Sling Models que representam Componentes ou Páginas do AEM e usando os objetos Sling Model para alimentar os scripts HTL com dados, com um resultado final de HTML que é exibido no navegador.
Fluxo de solicitação HTTP do modelo Sling
-
A solicitação HTTP GET é 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 do 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 por meio de 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 do 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.
-
A Solicitação HTTP GET é 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.