了解Sling Model Exporter

Apache Sling Models 1.3.0引入了Sling Model Exporter,这是一种将Sling Model对象导出或序列化为自定义抽象化对象的简便方法。 本文比较了使用Sling Models填充HTL脚本的传统用例,并利用Sling Model Exporter框架将Sling Model序列化为JSON。

传统Sling模型HTTP请求流

Sling Models的传统用例是为资源或请求提供业务抽象,这提供了HTL脚本(或以前的JSP)用于访问业务功能的接口。

常见模式是开发表示AEM组件或页面的Sling Models,并使用Sling Model对象向HTL脚本提供数据,最后在浏览器中显示HTML结果。

Sling模型HTTP请求流

Sling模型请求流

  1. 在AEM中为资源发出HTTP GET请求。

    示例: HTTP GET /content/my-resource.html

  2. 根据请求资源的sling:resourceType,解析相应的脚本。

  3. 该脚本将请求或资源调整到所需的Sling Model。

  4. 脚本使用Sling Model对象生成HTML呈现版本。

  5. 脚本生成的HTML将在HTTP响应中返回。

此传统模式在生成HTML的上下文中运行良好,因为可以通过HTL轻松利用Sling Model。 创建更多结构化数据(如JSON或XML)是一项繁琐得多的工作,因为HTL本身并不自然适合这些格式的定义。

Sling Model Exporter HTTP请求流

Apache Sling Model Exporter附带了一个Sling提供的Jackson导出程序,可自动将“普通”Sling Model对象序列化为JSON。 Jackson Exporter虽然可以配置,但其核心会检查Sling Model对象,并使用任何“getter”方法作为JSON键生成JSON,并使用getter返回值作为JSON值。

Sling Models的直接序列化允许它们使用使用传统Sling ModelHTML流(请参阅上文)创建的请求响应为常规Web请求提供服务,但也会公开Web服务或JavaScript应用程序可以使用的JSON演绎版。

Sling模型导出程序HTTP请求流

此流程描述使用提供的Jackson导出程序生成JSON输出的流程。 自定义导出程序的使用遵循相同的流程,但采用其输出格式。

  1. 在AEM中使用选择器和扩展名向Sling Model的导出程序注册的资源发出HTTPGET请求。

    示例: HTTP GET /content/my-resource.model.json

  2. Sling将所请求资源的sling:resourceType、选择器和扩展解析为动态生成的Sling导出程序Servlet,后者通过导出程序映射到Sling Model。

  3. 已解析的Sling导出器Servlet针对从请求或资源调整的Sling Model对象调用Sling Model Exporter(由Sling模型自适应表确定)。

  4. 导出器根据导出器选项和特定于导出器的Sling模型注释来序列化Sling Model,并将结果返回到Sling导出器Servlet。

  5. Sling导出程序Servlet在HTTP响应中返回Sling Model的JSON演绎版。

NOTE
虽然Apache Sling项目提供了将Sling Models序列化为JSON的Jackson导出程序,但导出程序框架也支持自定义导出程序。 例如,项目可以实施将Sling Model序列化为XML的自定义导出程序。
NOTE
不仅Sling Model Exporter 序列化 Sling Models,它还可以将它们导出为Java对象。 导出到其他Java对象在HTTP请求流中不起作用,因此未出现在上图中。

支持材料

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6