[英]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.