了解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,可自動將"ordinal" Sling Model物件序列化為JSON。 Jackson導出器雖然可配置性相當強,但其核心會檢查Sling Model對象,並使用任何"getter"方法作為JSON鍵,使用getter返回值作為JSON值生成JSON。

Sling Models的直接序列化可讓使用傳統Sling Model請求流程建立的HTML回應來服務一般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 Exporter Servlet會與Exporter對應至Sling Model。

  3. 解析的Sling導出器Servlet針對從請求或資源調用的Sling Model對象調用Sling Model Exporter(由Sling模型適配器確定)。

  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要求流程中不會發揮作用,因此不會出現在上圖中。

支援材料

本頁內容