了解Sling Model Exporter
- 主题:
- API
创建对象:
- 初学者
- 开发人员
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请求流
-
在AEM中为资源发出HTTP GET请求。
示例:
HTTP GET /content/my-resource.html
-
根据请求资源的
sling:resourceType
,解析相应的脚本。 -
该脚本将请求或资源调整到所需的Sling Model。
-
脚本使用Sling Model对象生成HTML呈现版本。
-
脚本生成的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演绎版。
此流程描述使用提供的Jackson导出程序生成JSON输出的流程。 自定义导出程序的使用遵循相同的流程,但采用其输出格式。
-
在AEM中使用选择器和扩展名向Sling Model的导出程序注册的资源发出HTTPGET请求。
示例:
HTTP GET /content/my-resource.model.json
-
Sling将所请求资源的
sling:resourceType
、选择器和扩展解析为动态生成的Sling导出程序Servlet,后者通过导出程序映射到Sling Model。 -
已解析的Sling导出器Servlet针对从请求或资源调整的Sling Model对象调用Sling Model Exporter(由Sling模型自适应表确定)。
-
导出器根据导出器选项和特定于导出器的Sling模型注释来序列化Sling Model,并将结果返回到Sling导出器Servlet。
-
Sling导出程序Servlet在HTTP响应中返回Sling Model的JSON演绎版。