【发布时间】:2020-03-29 19:18:37
【问题描述】:
我有一个 lambda 函数,当文件放入 S3 存储桶时接收 S3Event 对象。当 lambda 失败时,它会进入 Amazon SQS 中设置的死信队列。
当我提取这些消息时,这是正文:
{
"Records": [
{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "us-east-1",
"eventTime": "d",
"eventName": "d:Put",
"userIdentity": {
"principalId": ""
},
"requestParameters": {
"sourceIPAddress": "2"
},
"responseElements": {
"x-amz-request-id": "",
"x-amz-id-2": "g"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "",
"bucket": {
"name": "",
"ownerIdentity": {
"principalId": ""
},
"arn": ""
},
"object": {
"key": "",
"size": 12502,
"eTag": "",
"sequencer": ""
}
}
}
]
}
这看起来很像包含 S3EventNotification 记录列表的 S3Event 对象。我尝试使用以下方法将其反序列化为 S3 事件对象:
S3Event event = new GsonBuilder().serializeNulls().create().fromJson(s3EventString, S3Event.class);
这会产生一个像这样的空对象:
{"records":null}
我注意到在从 SQS 返回的 json 中,Records 中的“R”是大写的。我不确定这是否会有所不同,所以我将其更改为小写“r”,它会引发此错误:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
我真的不确定这实际上是什么类型的对象。
任何帮助将不胜感激。
【问题讨论】:
标签: events amazon-s3 gson amazon-sqs typetoken