为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

函数式编程 2023-05-24 16:04:47
我的团队有两个 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 字符串中的一些转义字符串。所以我想对我来说,所有这一切归结为两个问题:根据 CW 日志,Lambda 使用 FasterXML 的 Jackson 来映射 Lambda 输入。有什么方法可以@JsonProperty在自定义 RequestObject 类中使用注释或类似的东西吗?文件说:您不应依赖序列化框架的任何其他功能,例如注释。(但它仍然是杰克逊!!)有没有办法告诉 Lambda 停止尝试映射输入并只使用原始字节数组手动解析?这将解决很多令人头疼的问题,以便能够使用注释进行我们自己的自定义解析。在此先感谢,如果需要可以提供更多详细信息。
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

我一直在为同样的事情而苦苦挣扎。我使用它的解决方案不指望 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.


查看完整回答
反对 回复 2023-05-24
  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信