猿问

接受 JSON 输入到 Java Lambda 函数的问题

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

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

然而,甚至在 Lambda#2 被调用之前,Cloudwatch 日志指示 JSON 映射错误,表示 START_OBJECT 无法映射到字符串。很明显,在将其传递给 Lambda 之前,它试图自己进行一些映射。接下来我尝试的是自定义 POJO:

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

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

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

    您不应依赖序列化框架的任何其他功能,例如注释。

    (但它仍然是杰克逊!!)

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

在此先感谢,如果需要可以提供更多详细信息。


函数式编程
浏览 133回答 1
1回答

www说

我一直在为同样的事情而苦苦挣扎。我使用它的解决方案不指望 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.
随时随地看视频慕课网APP

相关分类

Java
我要回答