簡體   English   中英

如何在Lambda處理程序中反序列化DynamoDB Map類型

[英]How to deserialize DynamoDB Map type in Lambda handler

我有一個簡單的POJO:

public class MyClass {
    public String id;
    public String name;
}

我想將其序列化為JSON,該格式與DynamoDB類型Map嵌入式文檔的DynamoDB事件的AWS Lambda處理程序的格式相同:

M: { 
    id= { S: "abc123", },
    name= { S: "whatever", },
}

更重要的是,我想從Lambda函數收到的每個插入的JSON中反序列化它。 我能找到的唯一例子是非常簡單的例子。 它們都不包含在Lambda處理程序內部的事件中處理DynamoDB Maps。

我想知道是否必須手動編寫一個序列化程序,或者SDK中是否還沒有找到某些東西。

您可以將POJO映射到com.amazonaws.services.dynamodbv2.model.AttributeValue的實例,然后使用GSON對其進行序列化/反序列化。

這就是Gson入門的方法

下面是一個如何使用Gson操作AttributeValue的示例。

AttributeValue av1 = new AttributeValue("abc123");
AttributeValue av2 = new AttributeValue("whatever");
AttributeValue avM = new AttributeValue();
Map<String, AttributeValue> m = new HashMap<String, AttributeValue>();
m.put("id", av1);
m.put("name", av2);
avM.setM(m);
System.out.println(new Gson().toJson(avM));
// {"m":{"name":{"s":"whatever"},"id":{"s":"abc123"}}}

Map<String, Object> simpleMap = new HashMap<String, Object>();
simpleMap.put("id", "abc123");
simpleMap.put("name", "whatever");
AttributeValue avM2 = new AttributeValue().withM(InternalUtils.fromSimpleMap(simpleMap));
System.out.println(new Gson().toJson(avM2));
// {"m":{"name":{"s":"whatever"},"id":{"s":"abc123"}}}

String jsonStr = new Gson().toJson(avM2);
AttributeValue avM3 = new Gson().fromJson(jsonStr, AttributeValue.class);
System.out.println(avM3.getM().get("id").getS());
// abc123
System.out.println(avM3.getM().get("name").getS());
// whatever

如果您剛開始使用Java的Lambda和DynamoDB,建議您看一下Secure Pet Store

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM