了解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. HTTP GET 在AEM中请求资源。

    示例: 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导出程序,该导出程序会自动将“ordinal” Sling Model对象序列化为JSON。 虽然Jackson导出程序可进行相当的配置,但其核心会检查Sling Model对象,并使用任何“getter”方法作为JSON键生成JSON,而getter返回值作为JSON值生成。

通过Sling Models的直接序列化,用户可以使用使用传统的Sling Model请求流创建的HTML响应来为普通Web请求提供服务(请参阅上文),同时还可以显示Web服务或JavaScript应用程序可使用的JSON呈现版本。

Sling模型导出程序HTTP请求流程

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

  1. 对AEM中的资源发出HTTPGET请求,该资源的选择器和扩展已在Sling Model的导出程序中注册。

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

  2. Sling将所请求资源的sling:resourceType选择器和扩展解析为一个动态生成的Sling导出程序Servlet,该Servlet已映射到带有导出程序的Sling Model。

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

  4. 导出程序根据导出程序选项和导出程序特定的Sling模型批注序列化Sling Model,并将结果返回给Sling导出程序Servlet。

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

注意

虽然Apache Sling项目提供将Sling Models序列化为JSON的Jackson导出程序,但导出程序框架也支持自定义导出程序。 例如,项目可以实施将Sling Model序列化为XML的自定义导出程序。

注意

Sling Model Exporter 序列化 Sling Models不仅如此,还可以将它们导出为Java对象。 导出到其他Java对象在HTTP请求流中不起作用,因此不会显示在上图中。

辅助材料

在此页面上