AWS Lambda Java处理程序Hello World



我找到了新信息。我想我可能为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_OBECT令牌\n位于源:lambdainternal.util.NativeMemoryAsInputStream@566776ad;行:1,列:1","errorType":"java.io.UncheckedIOException","stackTrace":[],"原因":{"errorMessage":"无法在处反序列化START_OBECT令牌外的com.amazonaws.services.s3.model.S3Event实例\n来源:lambdainternal.util.NativeMemoryAsInputStream@566776ad;行:1,列:1","errorType":"com.fasterxml.jjackson.databind.JsonMappingException","stackTrace":["com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)","com.fasterxml.jackson.databind.DDeserializationContext.mappingException(Deserialization Context.java:835)","com.fasterxml.jackson.databind.DDeserializationContext.mappingException(Deserialization Context.java:831)","com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeOther(EnumDeserialize.java:137)","com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserialize.java:89)","com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserialize.java:18)","com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1441)","com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1047)"]}}}

检查是否导入了正确的S3Event类,即com.amazonaws.services.lambda.runtime.events.S3Event.

我得到了同样的异常,发现我被导入了com.amazonaws.services.s3.model.S3Event.

将方法handleRequest()的返回类型设置为Object,您也可以返回"Hello"。

您收到的错误消息

无法从START_OBECT令牌中反序列化com.amazonaws.services.s3.model.S3Event的实例

意味着作为Lambda函数的输入参数传递的值不代表S3Event对象。

您是否从AWS控制台测试Lambda功能,而不是触发真正的S3事件
如果是这样,请转到Lambda>Functions>yourFunction>Actions>Configure test event,并从Sample event template下拉菜单中选择S3 PutS3 Delete,以便向您的函数发送正确的输入以进行测试。

我认为您不能返回非对象响应。你可以这样做:

return new Gson().fromJson(jsonObject, Object.class);

注意:jsonObject是一个json,它包含您想要返回的信息。

相关内容

最新更新