gpt4 book ai didi

java - 具有 API Gateway 的 AWS Java Lambda 函数 - POJO 输入和 OutputStream 输出

转载 作者:行者123 更新时间:2023-12-01 21:15:12 24 4
gpt4 key购买 nike

我正在使用 Java 创建一个简单的 AWS Lambda 函数,用于创建并返回 PDF。该函数由 API 网关调用。输入是一个简单的 POJO 类,但输出应该是文件的 OutputStream

对于输入,我尝试创建一个 POJO 类并仅使用 APIGatewayProxyRequestEvent ,两者都可以正常工作。下面是我使用的一个简单示例,它接受输入并打印回查询字符串参数。

public class LambdaFunctionHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {

@Override
public APIGatewayProxyResponseEvent handleRequest( APIGatewayProxyRequestEvent input, Context context ) {

return new APIGatewayProxyResponseEvent()
.withStatusCode(200)
.withHeaders(Collections.emptyMap())
.withBody("{\"input\":\"" + input.getQueryStringParameters() + "\"}");
}

}

效果很好,但现在我需要更改它以使用 OutputStream 作为输出。如何才能做到这一点?我发现我可以使用 RequestStreamHandler 并且 AWS 有一些 documentation关于实现这一点。但是,这会强制我的输入成为 InputStream,我不确定它如何与 API 网关一起使用。

我如何将此 PDF 返回给请求它的客户?

最佳答案

请记住,Lambda 处理程序的 POJO 方法只是为了方便起见。最终,您可以自己执行此操作并使用 InputStream/OutputStream Lambda 模式。像这样的东西:

public void handleRequest(InputStream inputStream,
OutputStream outputStream,
Context context) throws IOException {
String inputString = new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining("\n"));

ObjectMapper objectMapper = new ObjectMapper();
APIGatewayProxyRequestEvent request = objectMapper.readValue(inputString, APIGatewayProxyRequestEvent.class);

// do your thing, generate a PDF
byte[] thePDF = ...
// create headers
Map<String, String> headers = new HashMap<>();
headers.put("Content-type", "application/pdf");

APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent().
.withStatusCode(200)
.withHeaders(headers)
.withBody(Base64.Encoder.encode(thePDF))
.withIsBase64Encoded(Boolean.TRUE);

outputStream.write(objectMapper.writeValueAsString(response)
.getBytes(StandardCharsets.UTF_8));
}

但是,我不相信这真的更好。如果您只想返回 PDF,而不返回 APIGatewayProxyResponseEvent,您可以,但现在您必须更新 API Gateway 以正确发送 Content-Type header 。

关于java - 具有 API Gateway 的 AWS Java Lambda 函数 - POJO 输入和 OutputStream 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58880903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com