自訂 Lambda Java 函數的序列化
Lambda Java 受管執行時期支援 JSON 事件的自訂序列化。自訂序列化可以簡化程式碼,並可能提高效能。
何時使用自訂序列化
調用 Lambda 函數時,輸入事件資料需要還原序列化為 Java 物件,函數的輸出需要序列化回可作為函數回應傳回的格式。Lambda Java 受管執行時期提供預設的序列化和還原序列化功能,非常適合處理來自 Amazon API Gateway、Amazon Simple Queue Service (Amazon SQS) 等各種 AWS 服務的事件承載。若要在函數中使用這些服務整合事件,請將 aws-java-lambda-events
您也可以使用自己的物件來代表傳遞至 Lambda 函數的事件 JSON。受管執行時期會嘗試以預設行為將 JSON 序列化至物件的新執行個體。如果預設序列化程式沒有您的使用案例所需的行為,請使用自訂序列化。
例如,假設您的函數處理程式需要 Vehicle
類別作為輸入,且其結構如下:
public class Vehicle { private String vehicleType; private long vehicleId; }
不過,JSON 事件承載如下所示:
{ "vehicle-type": "car", "vehicleID": 123 }
在這種情況下,受管執行時期的預設序列化期望 JSON 屬性名稱與駝峰式 Java 類別屬性名稱 (vehicleType
、vehicleId
) 相符。由於 JSON 事件中的屬性名稱不是駝峰式 (vehicle-type
、vehicleID
),您必須使用自訂序列化。
實作自訂序列化
使用服務提供者介面RequestHandler
介面,將 JSON 事件承載直接序列化至 Java 物件。
在 Lambda Java 函數中使用自訂序列化
-
新增 aws-lambda-java-core
程式庫做為相依項。此程式庫包含 CustomPojoSerializer 介面,以及在 Lambda 中使用 Java 的其他介面定義。 -
在專案的
src/main/META-INF/services/
目錄中建立名為com.amazonaws.services.lambda.runtime.CustomPojoSerializer
的檔案。 -
在此檔案中,指定自訂序列化工具實作的完全合格名稱,其必須實作
CustomPojoSerializer
介面。範例:com.mycompany.vehicles.CustomLambdaSerialzer
-
實作
CustomPojoSerializer
介面以提供您的自訂序列化邏輯。 -
在 Lambda 函數中使用標準
RequestHandler
介面。受管執行時期將使用自訂序列化程式。
如需如何使用常用程式庫 (例如 fastJson、Gson、Moshi 和 jackson-jr) 實作自訂序列化的更多範例,請參閱 AWS GitHub 儲存庫中的 custom-serialization
測試自訂序列化
測試您的函數以確定序列化和還原序列化邏輯如預期般運作。您可以使用 AWS Serverless Application Model 命令列介面 (AWS SAM CLI) 模擬 Lambda 承載的調用。這可協助您在引進自訂序列化程式時,快速測試並重複執行函數。
-
使用您想要用來調用函數的 JSON 事件承載建立一個檔案,然後呼叫 AWS SAM CLI。
-
執行 sam local invoke 命令以在本機調用您的函數。範例:
sam local invoke -e src/test/resources/event.json
如需詳細資訊,請參閱 Locally invoke Lambda functions with AWS SAM。