【问题标题】:Cannot pass string to AWS Lambda using InvokeRequest.withPayload() method无法使用 InvokeRequest.withPayload() 方法将字符串传递给 AWS Lambda
【发布时间】:2020-06-26 16:59:57
【问题描述】:

我有一个接受字符串作为输入参数的 lambda 函数。运行 lambda 函数时,出现以下错误: Can not deserialize instance of java.lang.String out of START_OBJECT token\n

这也是我的代码所称的样子:

InvokeRequest request = new InvokeRequest();
final String payload = "";
request.withFunctionName(FUNCTION_NAME).withPayload((String) null);
InvokeResult invokeResult = lambdaClient.invoke(request);
Assert.assertEquals(new String (invokeResult.getPayload().array(), "UTF-8"), "Success");

这就是我的处理程序的样子:

public String handleRequest(String s, Context context) {}

现在字符串的内容无关紧要,它可以是 null 也可以是任何东西。我不使用输入。显而易见的解决方案是删除它,但由于我正在使用注释生成器,我不能这样做。我尝试了ByteBuffer 输入、字符串、空字符串、JSON 字符串{\"s\":\"s\"},但似乎没有任何效果。我相信我需要传入一个字符串(即没有 {})。但是由于我使用的是 InvokeRequest 我不相信我能做到这一点。任何建议将不胜感激。

【问题讨论】:

  • 尝试使用此处提供的解决方案。希望它会帮助stackoverflow.com/questions/41616806/…
  • 感谢您的链接!我实际上遵循了相同的教程,但它没有用。不过我很感激!

标签: json amazon-web-services aws-lambda


【解决方案1】:

它通过传递一个 JSON 有效字符串来工作。

String payload = "{ \"subject\" : \"content\"}";
request.withFunctionName(functionName)           
                .withPayload(payload);
  

在接收端,如果你想要的话,你必须再次将它从 Object 映射到 String。在这里,我使用了 Jackson ObjectMapper。

ObjectMapper objectMapper = new ObjectMapper();
        try {
            String payload = objectMapper.writeValueAsString(input);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2013-03-31
    • 1970-01-01
    相关资源
    最近更新 更多