Entender Sling Model Exporter

O Apache Sling Models 1.3.0 introduz 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 de usar Sling Models para preencher scripts HTL, com o aproveitamento da estrutura Sling Model Exporter para serializar um Sling Model no JSON.

Fluxo de Solicitação HTTP do Modelo de 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) e 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 exibido no navegador.

Fluxo de Solicitação HTTP do Modelo Sling

Fluxo de solicitação do modelo Sling

  1. HTTP GET A solicitação é feita para um recurso no AEM.

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

  2. Com base no sling:resourceType do recurso de solicitação, o script apropriado é resolvido.

  3. O Script adapta a Solicitação ou o Recurso ao Sling Model desejado.

  4. O script usa o objeto Sling Model para gerar a representação HTML.

  5. 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, é um esforço muito mais entediante, já que HTL não se presta naturalmente à definição desses formatos.

Sling Model Exporter Fluxo de solicitação HTTP

O Apache Sling Model Exporter vem com um Exportador Jackson fornecido pelo Sling que serializa automaticamente um objeto "comum" Sling Model no JSON. O Exportador Jackson, embora bastante configurável, em seu núcleo inspeciona o objeto Sling Model e gera JSON usando qualquer método "getter" como chaves JSON, e o getter return values como os valores JSON.

A serialização direta de Sling Models permite que elas atendam às solicitações normais da Web com suas respostas HTML criadas usando o fluxo de solicitação tradicional Sling Model (veja acima), mas também exponham representações JSON que podem ser consumidas por serviços da Web ou aplicativos JavaScript.

Fluxo de Solicitação HTTP do Exportador do Modelo Sling

Este fluxo descreve o fluxo utilizando o exportador de Jackson fornecido para produzir a saída JSON. O uso de exportadores personalizados segue o mesmo fluxo, mas com seu formato de saída.

  1. A Solicitação HTTP GET é feita para um recurso no AEM com o seletor e a extensão registrados no Exportador do Sling Model.

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

  2. O Sling resolve o sling:resourceType do recurso solicitado, o seletor e a extensão para um Servlet Sling Exporter gerado dinamicamente, que é mapeado para Sling Model com Exportador.

  3. O Servlet Exportador Sling resolvido chama o Sling Model Exporter em relação ao objeto Sling Model adaptado a partir da solicitação ou do recurso (como determinado pelas adaptáveis dos Modelos Sling).

  4. O exportador serializa o Sling Model com base nas anotações Opções do Exportador e no Modelo de Sling específico do Exportador e retorna o resultado ao Servlet do Exportador Sling.

  5. O Servlet do Exportador Sling retorna a representação JSON do Sling Model na Resposta HTTP.

OBSERVAÇÃO

Embora o projeto Apache Sling forneça o Exportador Jackson que serializa Sling Models para JSON, o quadro Exportador também suporta Exportadores personalizados. Por exemplo, um projeto pode implementar um Exportador personalizado que serializa um Sling Model no XML.

OBSERVAÇÃO

Além de 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.

Materiais de apoio

Nesta página