当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda事件反序列化

陈德泽
2023-03-14

有没有人成功地为 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";
    }
}

错误消息:

JSON 解析期间发生错误:java.lang.RuntimeException java.lang.RuntimeException:JSON 解析期间发生错误 由以下原因引起:java.io.UncheckedIOException: com.fasterxml.jackson.databind.JsonMappingException: 无法反序列化 com.amazonaws.services.s3.model.S3Event 的实例 从 START_OBJECT 令牌中解脱 [来源: lambdainternal.util.NativeMemoryAsInputStream@6108b2d7; 行: 1, 列: 1] 由: com.fasterxml.jackson.databind.JsonMappingException: 不能反序列化 com.amazonaws.services.s3.model.S3Event 的实例 out of START_OBJECT 令牌 at [来源: lambdainternal.util.NativeMemoryAsInputStream@6108b2d7; 行: 1, 列: 1] at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:835) at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:831) at com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeOther(EnumDeserializer.java:137) at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:89) at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:18) at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1441) atcom.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1047)

共有1个答案

汲品
2023-03-14

解决方案是采取S3EventNotify。希望在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();
    }
}
 类似资料:
  • 当我切换到XStream作为事件序列化器时,一切都很好。不执行额外的偶数实例,在命令处理程序中创建的事件与在EventHandler中处理的事件相同。 这是怎么回事?

  • 我有Flume Avro水槽和SparkStreams程序来读取水槽。CDH 5.1、Flume 1.5.0、Spark 1.0,使用Scala作为Spark上的程序lang 我能够制作Spark示例并计算Flume Avro事件。 但是我无法将 Flume Avro 事件反序列化为字符串\文本,然后解析结构行。 有人能举例说明如何使用Scala做到这一点吗?

  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。

  • 问题内容: 我正在使用Xstream序列化Job对象。看起来不错。 但是反序列化,我有一个问题: 你们中的一个人以前遇到过这个问题吗? 这是我序列化的方法: 我也尝试这样做: 对于反序列化,我这样做是这样的: XML结构: 如果是,我想听听。提前致谢。 问题答案: fromXML没有文件名,请尝试: 以String形式读取文件内容。 在XStream中,字段名“ id”和“引用”也恰好是“系统属性

  • 问题内容: 我尝试过在Java和Android之间实现跨平台序列化。我使用了Serializable,并将我的代码在Android中与台式机Java放在同一软件包中。 来源:java-desktop序列化 资料来源:Android-反序列化 学生是一类,实现了Serializable。在桌面上,我将学生实例序列化为“ thestudent.dat”。我将此文件放在Android设备上的SD卡上,并