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

可以在静态编程语言/Java中创建AWS lambda处理程序,而不实现请求处理程序吗?

元俊雅
2023-03-14

TLDR:在CDK中,lambda处理程序是一个方法引用,所以对于Java/Kotlin,是否需要实现RequestHandler类?

在Java/静态编程语言中定义lambda的典型方法是扩展请求处理程序类并覆盖handleRequest函数。然而,当Java中有许多类似的函数时,这会导致许多类似的文件/类定义。

建议的定义如下所示:

public class Handler implements RequestHandler<Event, String>{

  @Override
  public String handleRequest(Event event, Context context)
  {
      ...
  }
}

而我在静态编程语言中能想出的最简单的,自然也不是什么显著的改进,看起来是这样的:

class Handler : RequestHandler<Event, String> {
    override fun handleRequest(request: Event, context: Context) : String {
       ...
    }
}

在CDK中,lambda处理程序是一个方法引用,那么“RequestHandler”实现是必要的吗?这真的是关键问题,把它放在首位。

共有2个答案

尉迟招
2023-03-14

在Java中,最简单的Lambda处理程序如下所示:

public class SampleHandler implements RequestStreamHandler {

    public void handleRequest(InputStream inputStream,
                              OutputStream outputStream,
                              Context context) throws IOException {
        context.getLogger().log("in the Lambda handler");
    }
}

handleRequest方法中,您必须从inputStream读取数据。一个例子是:

ObjectMapper mapper = new ObjectMapper();

YourObject yourObject = mapper.readValue(inputStream, YourObject.class);

现在你有了Lambda通常会为你反序列化的对象。要“返回”某些内容,只需将其写入输出流

OutputStreamWriter writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
writer.write("{\"result\":\"everything is awesome\"}");

writer.close();

当然,你也可以使用mapper之类的工具。writeValue(outputStream,yourResultObject)以避免自己进行JSON序列化。

轩辕弘雅
2023-03-14

您不必实现RequestHandler接口。根据官方文档,如果你的类没有实现RequestHandler接口,你只需要告诉AWS要调用哪个函数:

example.Handler::handleRequest

在CDK应用程序中定义这样的函数没有什么特别之处:

Function handlerFunction = Function.Builder.create(this, "ExampleHandlerFunction")
        .functionName("example-handler-function")
        .handler("example.Handler::handleRequest")
        .runtime(Runtime.JAVA_11)
        .code(Code.fromAsset("path/to/the/jar"))
        .build();
 类似资料:
  • 暴露0.27.1是否能够翻译以下SQL语句? 下面是我尝试的内容,但不幸的是,子查询独立于查询的其余部分工作。 此外,如果可能的话,那么如何使用别名从ResultRow获取结果?在这个示例之后,解决方案似乎是将整个子查询存储在单个变量中,并使用一个alias()方法调用,但这看起来很难看。有没有更好的方法?

  • 当结合使用SpringWebFlux和Kotlin协同程序时,我很难理解一个简单的RESTfulWS响应处理场景。假设我们在REST控制器中有一个简单的WS方法,该方法可能返回大量(数百万)响应“things”: 这正如人们所期望的那样:只要使用流媒体类型(例如“application/x-ndjson”),结果就会流式传输到客户端。在更复杂的服务调用中,也考虑了错误/警告的可能性,我希望返回以下

  • 我有以下问题:-创建了几个模块来实现类,并用-我的Android应用程序正在使用检索这些类。但是由于某种原因,没有在

  • 根据 的来源,如果发生错误,将引发异常。 在的大多数示例中,没有使用try-catch,如下所示。为什么不需要错误处理?它安全吗?

  • 我希望函数位于类中(不污染全局名称空间),但可以静态访问(从不创建它们所在的对象)。提议的解决办法: 这是一个好的解决方案,还是不可避免地会创建一个对象?我应该使用哪种图案?

  • 它只会创建错误或重写现有文件。 TLDR:我如何让我的注释处理器编辑另一个注释处理器生成的文件?