Java AWS Lambda S3事件反序列化

Java AWS Lambda S3事件反序列化,java,amazon-web-services,aws-lambda,Java,Amazon Web Services,Aws Lambda,是否有人成功地为S3事件实现了基于Java的请求处理程序 我的班级: package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.s3.model.S3Event; public class Hello implements Req

是否有人成功地为S3事件实现了基于Java的请求处理程序

我的班级:

package example;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.s3.model.S3Event;

public class Hello implements RequestHandler<S3Event, String> {
    public String handleRequest(S3Event event, Context context) {
        return "Success";
    }
}
包示例;
导入com.amazonaws.services.lambda.runtime.Context;
导入com.amazonaws.services.lambda.runtime.RequestHandler;
导入com.amazonaws.services.s3.model.S3Event;
公共类Hello实现RequestHandler{
公共字符串handleRequest(S3Event事件,上下文){
返回“成功”;
}
}
错误消息:


JSON解析过程中发生错误:java.lang.RuntimeException java.lang.RuntimeException:JSON解析过程中发生错误,原因是:java.io.UncheckedIOException:com.fasterxml.jackson.databind.JsonMappingException:无法反序列化com.amazonaws.services.s3.model.S3Event的实例,而不是位于[来源:lambdainternal.util。NativeMemoryAsInputStream@6108b2d7;第1行,第1列]由以下原因引起:com.fasterxml.jackson.databind.JsonMappingException:无法反序列化位于[Source:lambdainternal.util]的START_对象令牌之外的com.amazonaws.services.s3.model.s3事件实例。NativeMemoryAsInputStream@6108b2d7;行:1,列:1]com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:835)com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:831)位于com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeOther(EnumDeserializer.java:137)位于com.fasterxml.jackson.databind.desr.std.EnumDeserializer.Deserializer(EnumDeserializer.java:89)位于com.fasterxml.jackson.databind.desr.std.EnumDeserializer.Deserializer.Deserializer(EnumDeserializer.java:18)com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1441)com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1047)

解决方案是采用S3EventNotification。希望AWS文档中包含了这一点。我喜欢Lambda概念,但没有太多文档或示例

public void mergeGLAU(S3EventNotification notification, Context context) {
    try {
        for (S3EventNotificationRecord record : notification.getRecords()) {
            System.out.println(record.getEventSource());
            System.out.println(record.getEventName());
            System.out.println(record.getS3().getBucket().getName());
            System.out.println(record.getS3().getObject().getKey());
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

您是否将Lambda函数配置为直接从S3 bucket收到通知?如果您将SNS配置为“中间”,则可能会导致您看到的错误,因为JSON有效负载不匹配。