瞭解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請求流程
-
在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 Exporter,可自動將「一般」Sling Model物件序列化為JSON。 Jackson Exporter雖然相當可設定,但其核心會檢查Sling Model物件,並使用任何「getter」方法作為JSON金鑰產生JSON,並使用getter傳回值作為JSON值。
Sling Models的直接序列化可讓他們透過使用傳統Sling Model要求流程(請參閱上文)建立的HTML回應,為一般Web要求提供服務,同時也公開Web服務或JavaScript應用程式可使用的JSON轉譯。
此流程說明使用提供的Jackson Exporter產生JSON輸出的流程。 自訂匯出工具的使用遵循相同的流程,但採用其輸出格式。
-
在AEM中針對資源發出HTTPGET要求,選取器和擴充功能已向Sling Model的匯出工具註冊。
範例:
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 Exporter Servlet傳回HTTP回應中Sling Model的JSON轉譯。