Personalizzare la serializzazione per le funzioni Lambda Java
I runtime gestiti da Java di Lambda supportano la serializzazione personalizzata per gli eventi JSON. La serializzazione personalizzata può semplificare il codice e potenzialmente migliorare le prestazioni.
Argomenti
Quando usare la serializzazione personalizzata
Quando viene richiamata la funzione Lambda, i dati degli eventi di input devono essere deserializzati in un oggetto Java e l'output della funzione deve essere nuovamente serializzato in un formato che può essere restituito come risposta della funzione. I runtime gestiti da Java per Lambda forniscono funzionalità di serializzazione e deserializzazione predefinite che funzionano bene per la gestione dei payload di eventi da vari servizi AWS, come Gateway Amazon API e Amazon Simple Queue Service (Amazon SQS). Per utilizzare questi eventi di integrazione dei servizi nella tua funzione, aggiungi la dipendenza aws-java-lambda-events
Puoi anche usare i tuoi oggetti per rappresentare l'evento JSON che passi alla tua funzione Lambda. Il runtime gestito prova a serializzare il JSON su una nuova istanza dell'oggetto con il suo comportamento predefinito. Se il serializzatore predefinito non ha il comportamento desiderato per il tuo caso d'uso, usa la serializzazione personalizzata.
Supponiamo, ad esempio, che l'handler di funzioni si aspetti una classe Vehicle
come input, con la seguente struttura:
public class Vehicle { private String vehicleType; private long vehicleId; }
Tuttavia, il payload dell'evento JSON ha il seguente aspetto:
{ "vehicle-type": "car", "vehicleID": 123 }
In questo scenario, la serializzazione predefinita nel runtime gestito prevede che i nomi delle proprietà JSON corrispondano ai nomi delle proprietà della classe Java con notazione a cammello (vehicleType
, vehicleId
). Poiché i nomi delle proprietà nell'evento JSON non sono in notazione a cammello (vehicle-type
, vehicleID
), è necessario utilizzare la serializzazione personalizzata.
Implementazione della serializzazione personalizzata
Utilizza un'interfaccia del provider di serviziRequestHandler
standard.
Per utilizzare la serializzazione personalizzata nella funzione Java per Lambda
-
Aggiungi la libreria aws-lambda-java-core
come dipendenza. Questa libreria include l'interfaccia CustomPojoSerializer , insieme ad altre definizioni di interfaccia per lavorare con Java in Lambda. -
Crea un file denominato
com.amazonaws.services.lambda.runtime.CustomPojoSerializer
nella directorysrc/main/META-INF/services/
del progetto. -
In questo file, specifica il nome completo dell'implementazione del serializzatore personalizzato, che deve implementare l'interfaccia
CustomPojoSerializer
. Esempio:com.mycompany.vehicles.CustomLambdaSerialzer
-
Implementa l'interfaccia
CustomPojoSerializer
per fornire la tua logica di serializzazione personalizzata. -
Usa l'interfaccia
RequestHandler
standard nella tua funzione Lambda. Il runtime gestito utilizzerà il serializzatore personalizzato.
Per altri esempi di come implementare la serializzazione personalizzata tramite le librerie comuni come fastJson, Gson, Moshi e jackson-jr, consulta l'esempio custom-serialization
Test della serializzazione personalizzata
Verifica la tua funzione per assicurarti che la logica di serializzazione e deserializzazione funzioni come previsto. È possibile utilizzare l'interfaccia a riga di comando AWS Serverless Application Model (AWS SAM CLI) per emulare l'invocazione del payload Lambda. Questo può aiutarti a testare e iterare rapidamente la tua funzione man mano che introduci un serializzatore personalizzato.
-
Crea un file con il payload dell'evento JSON con cui desideri richiamare la tua funzione, quindi chiama la CLI AWS SAM.
-
Esegui il comando sam local invoke per richiamare la tua funzione in locale. Esempio:
sam local invoke -e src/test/resources/event.json
Per ulteriori informazioni, consulta Richiamare in locale le funzioni Lambda con AWS SAM.