瞭解 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)用於存取業務功能的介面。

正在開發常見模式 Sling Models 表示AEM元件或頁面,並使用 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的情境下,此傳統模式運作良好,例如 Sling Model 可透過HTL輕鬆運用。 建立更具結構化的資料(例如JSON或XML)是一項相當乏味的工作,因為HTL本身並不適合這些格式的定義。

Sling Model Exporter HTTP要求流程

Apache Sling Model Exporter 隨附於Sling提供的Jackson Exporter,可自動序列化 Sling Model 物件併入JSON。 Jackson Exporter雖然相當可設定,但其核心會檢查 Sling Model 物件,並使用任何「getter」方法作為JSON索引鍵產生JSON,而getter傳回值作為JSON值。

的直接序列化 Sling Models 可讓他們透過使用傳統方式建立的HTML回應,為一般的Web請求提供服務 Sling Model 要求流程(請參閱上文),但也會公開Web服務或JavaScript應用程式可使用的JSON轉譯。

Sling模型匯出程式HTTP請求流程

此流程說明使用提供的Jackson Exporter產生JSON輸出的流程。 自訂匯出工具的使用遵循相同的流程,但採用其輸出格式。

  1. AEM中的資源會發出HTTPGET要求,選擇器和擴充功能會註冊至 Sling Model的匯出工具。

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

  2. Sling解析請求資源的 sling:resourceType,此元件為動態產生的Sling Exporter Servlet的選擇器和擴充功能,此元件已對應至 Sling Model 使用匯出工具。

  3. 已解析的Sling匯出工具Servlet會叫用 Sling Model Exporter 針對 Sling Model 根據請求或資源改寫的物件(由Sling模型改寫決定)。

  4. 匯出工具會序列化 Sling Model 根據匯出工具選項和匯出工具特定的Sling模型註解,並將結果傳回Sling匯出工具Servlet。

  5. Sling Exporter Servlet傳回 Sling Model 在HTTP回應中。

NOTE
Apache Sling專案則提供序列化的Jackson Exporter Sling Models 對於JSON,匯出工具架構也支援自訂匯出工具。 例如,專案可以實作自訂匯出工具,將 Sling Model 轉換為XML。
NOTE
不僅如此 Sling Model Exporter 序列化 Sling Models,也可以將其匯出為Java物件。 匯出至其他Java物件在HTTP請求流程中不會扮演任何角色,因此不會出現在上圖中。

支援材料

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