Apache Sling Models 1.3.0 introduz Sling Model Exporter, uma maneira elegante de exportar ou serializar Sling Model objetos em abstrações personalizadas. Este artigo justapõe o caso de uso tradicional de Sling Models para preencher scripts HTL, com o uso da variável Sling Model Exporter estrutura para serializar um Sling Model no JSON.
O caso de uso tradicional para Sling Models O é fornecer uma abstração de negócios para um recurso ou solicitação, que fornece scripts HTL (ou JSPs anteriores) e uma interface para acessar funções de negócios.
Padrões comuns em desenvolvimento Sling Models que representam AEM componentes ou páginas e usam o Sling Model objetos para alimentar os scripts HTL com dados, com um resultado final do HTML exibido no navegador.
HTTP GET A solicitação é feita para um recurso no AEM.
Exemplo: HTTP GET /content/my-resource.html
Com base no sling:resourceType
, o Script apropriado é resolvido.
O Script adapta a Solicitação ou o Recurso ao Sling Model.
O script usa a variável 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 como o Sling Model pode ser facilmente aproveitado via HTL. Criar dados mais estruturados, como JSON ou XML, é um esforço muito mais entediante, já que HTL não se presta naturalmente à definição desses formatos.
Apache Sling Model Exporter vem com um exportador de Jackson fornecido pelo Sling que serializa automaticamente um "normal" Sling Model em JSON. O Exportador Jackson, embora bastante configurável, no seu núcleo inspeciona o Sling Model e gera JSON usando qualquer método "getter" como chaves JSON e o getter retorna valores como os valores JSON.
A serialização direta de Sling Models permite que eles atendam às solicitações normais da Web com as respostas do HTML criadas usando o Sling Model fluxo de solicitação (veja acima), mas também exponha representações JSON que podem ser consumidas por serviços da Web ou aplicativos JavaScript.
Este fluxo descreve o fluxo utilizando o exportador de Jackson fornecido para produzir a saída JSON. A utilização de exportadores personalizados segue o mesmo fluxo, mas com o respectivo formato de saída.
HTTP GET Request é feito para um recurso no AEM com o seletor e a extensão registrada no Sling ModelExportador.
Exemplo: HTTP GET /content/my-resource.model.json
O Sling resolve o sling:resourceType
, seletor e extensão para um Servlet Exportador Sling gerado dinamicamente, que é mapeado para o Sling Model com Exportador.
O Servlet do Exportador Sling resolvido chama o Sling Model Exporter contra Sling Model objeto adaptado a partir da solicitação ou do recurso (conforme determinado pelos adaptáveis dos Modelos do Sling).
O exportador serializa o Sling Model com base nas anotações das opções do exportador e do modelo Sling específico do exportador e retorna o resultado ao Servlet do exportador Sling.
O Servlet do Exportador Sling retorna a representação JSON do Sling Model na Resposta HTTP.
Enquanto o projeto Apache Sling fornece o Exportador Jackson que serializa Sling Models para JSON, o quadro Exportador também oferece suporte a exportadores personalizados. Por exemplo, um projeto pode implementar um Exportador personalizado que serializa um Sling Model em XML.
Não apenas Sling Model Exporter serializar Sling Models, também pode exportá-los como objetos Java. A exportação para outros objetos Java não desempenha uma função no fluxo da Solicitação HTTP e, portanto, não aparece no diagrama acima.