首页 文章

AWS Lambda Java Handler Hello World

提问于
浏览
1

我找到了新的信息 . 我想也许我已经为我的S3事件源实现了错误的界面 . 到目前为止,我还没有能够让它工作或理解应该实现哪个接口 . RequestHandler接口要求handleRequest方法返回一个值 . 有什么建议?

outputType - 如果计划同步调用Lambda函数(使用RequestResponse调用类型),则可以使用任何支持的数据类型返回函数的输出 . 例如,如果使用Lambda函数作为移动应用程序后端,则同步调用它 . 您的输出数据类型将序列化为JSON . 如果计划异步调用Lambda函数(使用Event调用类型),则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”:[],“cause”:{“errorMessage”:“com.fasterxml.jackson . databind.JsonMappingException:无法在源代码中从START_OBJECT标记\ n中反序列化com.amazonaws.services.s3.model.S3Event的实例:lambdainternal.util.NativeMemoryAsInputStream@566776ad; line:1,column:1“,”errorType“: “java.io.UncheckedIOException”,“stackTrace”:[],“cause”:{“errorMessage”:“无法在源代码中反序列化START_OBJECT令牌中的com.amazonaws.services.s3.model.S3Event实例: lambdainternal.util.NativeMemoryAsInputStream@566776ad; line:1,column:1“,”errorType“:”com.fasterxml.jackson.databind.JsonMappingException“,”stackTrace“:[”com.fasterxml.jackson.databind.JsonMappingException.from (JsonMappingException.java:148)“,”com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:835)“,”com.fasterxml.jackson.databind.DeserializationC ontext.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)“]}}}

4 回答

  • 0

    您收到的错误消息

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

    表示作为输入参数传递给Lambda函数的值不表示S3Event对象 .

    您是否在AWS控制台上测试Lambda函数,而不是触发真正的S3事件?
    如果是这样,请转到Lambda>函数> yourFunction>操作>配置测试事件,并从Sample事件模板下拉列表中选择 S3 PutS3 Delete ,以将适当的输入发送到您的函数以进行测试 .

  • 0

    我认为你无法返回非对象响应 . 你可以这样做:

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

    注意:jsonObject是一个包含要返回的信息的json .

  • 0

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

    我得到了同样的例外,并且发现我已经导入了com.amazonaws.services.s3.model.S3Event .

  • 0

    将方法handleRequest()的返回类型设为Object,也可以返回“Hello” .

相关问题