首页 > 解决方案 > 用于无效输出的 AWS Lambda RequestHandler

问题描述

考虑一个用 Java 编写的简单 Lambda:

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class Hello implements RequestHandler<Integer, String>{
    public String handleRequest(int myCount, Context context) {
        return String.valueOf(myCount);
    }
}

处理程序接口定义为RequestHandler<InputType, OutputType>,但是当我的 Lambda 对事件做出反应并且只是产生一些副作用时,输出类型是不必要的,我必须编写如下内容:

public class Hello implements RequestHandler<SNSEvent, Void>{
    public Void handleRequest(SNSEvent snsEvent, Context context) {
        ...
        return null;
    }
}

这很烦人。

处理程序是否有替代方案RequestHandlervoid

public class Hello implements EventHandler<SNSEvent>{
    public void handleEvent(SNSEvent snsEvent, Context context) {
        ...
    }
}

标签: javaamazon-web-servicesaws-lambdaaws-sdk-java-2.0

解决方案


您不需要为您的 Lambda 入口点实现接口。您的处理程序类可以只是一个带有满足文档中说明的要求的签名的 POJO 。

例如:

package example;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.SNSEvent;

public class Hello {
  public void handleEvent(SNSEvent event, Context context) {
    // Process the event
  }
}

在这种情况下,您应该使用example.Hello::handleEvent作为处理程序配置。

另请参阅官方文档中的此示例

package example;

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.LambdaLogger;

public class Hello {
    public String myHandler(int myCount, Context context) {
        LambdaLogger logger = context.getLogger();
        logger.log("received : " + myCount);
        return String.valueOf(myCount);
    }
}

推荐阅读