gpt4 book ai didi

java - Java Lambda 函数接受 JSON 输入时出现问题

转载 作者:行者123 更新时间:2023-12-02 09:37:05 26 4
gpt4 key购买 nike

我的团队有两个 AWS Lambda,分别用 Golang(1) 和 Java8(2) 编写。 Lambda#1 正在向 Lambda#2 发送 JSON 负载;由于 Lambda 中 Golang 的性质,它必须作为字节数组发送。这就是问题开始的地方。 我首先声明我的 Java 处理程序,如下所示:

公共(public)字符串handleRequest(字符串输入,上下文_context){}

但是,在调用 Lambda#2 之前,Cloudwatch 日志会指示 JSON 映射错误,指出 START_OBJECT 无法映射到 String。很明显,它在将其传递给 Lambda 之前尝试自己进行一些映射。我接下来尝试的是自定义 POJO:

public String handleRequest(RequestObj input, Context _context){}

但是这也失败了,我相信这是由于 JSON 字符串中的一些转义字符串造成的。所以我想这对我来说可以归结为两个问题:

  1. 根据 CW 日志,Lambda 使用 FasterXML 的 Jackson 来映射 Lambda 输入。有没有办法在自定义 RequestObject 类中使用 @JsonProperty 注释或类似的东西?文档说:

    You shouldn't rely on any other features of serialization frameworks such as annotations.

    (但它仍然是 jackson !!)

  2. 有没有办法告诉 Lambda 停止尝试映射输入,而只是手动解析原始字节数组?这将解决很多令人头痛的问题,以便能够使用注释进行我们自己的自定义解析。

提前致谢,如果需要,可以提供更多详细信息。

最佳答案

我也曾为同样的事情而苦苦挣扎。我使用它的解决方案是不指望 Lambda 为我进行序列化。我做了类似的事情:

public void handleRequest(InputStream inputStream,
OutputStream outputStream,
Context context) throws IOException {

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(inputStream);

然后执行以下操作:

String name = jsonNode.get("name").asText();

根据需要。当然,如果您愿意,您也可以获取 POJO - 这取决于对象的大小。

然后,我在构建文件中使用 jackson-core 来引入所需的依赖项。当然,如果您需要返回任何内容,可以使用ObjectMapper写入OutputStream

关于java - Java Lambda 函数接受 JSON 输入时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57416678/

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