我的团队有两个 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.
添加回答
举报
0/150
提交
取消