我找到了新的信息。我想也许我已经为我的S3事件源实现了错误的界面。到目前为止,我还没有能够让它工作或理解应该实现哪个接口。 RequestHandler接口要求handleRequest方法返回一个值。有什么建议?
outputType - 如果您计划同步调用Lambda函数 (使用RequestResponse调用类型),您可以返回输出 使用任何支持的数据类型的函数。例如, 如果你使用Lambda函数作为移动应用程序后端,那么你就是 同步调用它。您的输出数据类型将被序列化 进入JSON。
如果您打算异步调用Lambda函数(使用 事件调用类型),outputType应为void。例如,如果 您将AWS Lambda与事件源(如Amazon S3,Amazon)一起使用 Kinesis和Amazon SNS,这些事件源调用Lambda 使用事件调用类型的函数。
我创建了一个基本的处理程序,但似乎错过了一个继续暗示我的关键步骤。
代码&错误如下:
package example;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.s3.model.S3Event;
public class Hello implements RequestHandler<S3Event, Object> {
public String handleRequest(S3Event input, Context context) {
return "Hello";
}
}
{“errorMessage”:“在JSON解析期间发生错误”,
“errorType”:“java.lang.RuntimeException”,“stackTrace”:[],
“原因”:{ “errorMessage”:“com.fasterxml.jackson.databind.JsonMappingException:不能 反序列化com.amazonaws.services.s3.model.S3Event的实例 来源:START_OBJECT令牌\ n: lambdainternal.util.NativeMemoryAsInputStream@566776ad;行:1, 栏:1“, “errorType”:“java.io.UncheckedIOException”, “堆栈跟踪”: [], “原因”:{ “errorMessage”:“无法从START_OBJECT令牌中取消序列化com.amazonaws.services.s3.model.S3Event的实例\ n 来源:lambdainternal.util.NativeMemoryAsInputStream@566776ad;线: 1,栏:1“, “errorType”:“com.fasterxml.jackson.databind.JsonMappingException”, “堆栈跟踪”: [ “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.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:89)”, “com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:18)”, “com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1441)”, “com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1047)”] } }}
答案 0 :(得分:0)
将方法handleRequest()的返回类型设为Object,然后返回&#34; Hello&#34;太
答案 1 :(得分:0)
您收到的错误消息
无法从START_OBJECT标记中反序列化com.amazonaws.services.s3.model.S3Event的实例
表示作为输入参数传递给Lambda函数的值不代表S3Event对象。
您是否在AWS控制台上测试Lambda函数,而不是触发真正的S3事件? 如果是这样,请转到 Lambda&gt;功能&gt;你的功能&gt;行动&gt;配置测试事件并从示例事件模板下拉列表中选择 S3 Put 或 S3 Delete ,将正确的输入发送到您的函数为了测试。
答案 2 :(得分:0)
我认为你无法返回非对象回复。你可以这样做:
return new Gson().fromJson(jsonObject, Object.class);
注意:jsonObject是一个包含要返回的信息的json。
答案 3 :(得分:0)
检查您是否正在导入正确的S3Event类,即com.amazonaws.services.lambda.runtime.events.S3Event。
我遇到了同样的例外,发现我已经导入了com.amazonaws.services.s3.model.S3Event。