【问题标题】:Execution failed due to configuration error: Malformed Lambda proxy response in Java由于配置错误,执行失败:Java 中格式错误的 Lambda 代理响应
【发布时间】:2020-04-19 11:02:37
【问题描述】:

我的函数是通过代理 API 网关调用的。函数执行正常,但 API 调用返回 502 错误:

Mon Dec 30 18:16:25 UTC 2019 : Endpoint response body before transformations: "{}"
Mon Dec 30 18:16:25 UTC 2019 : Execution failed due to configuration error: Malformed Lambda proxy response
Mon Dec 30 18:16:25 UTC 2019 : Method completed with status: 502

响应应该是一个字符串化的 JSON,并且应该包括一个 statusCode、一个 body 和 headers。所有这些都包含在下面,但我仍然收到 由于配置错误导致执行失败:格式错误的 Lambda 代理响应。帮忙?

package example;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
import javax.json.bind.JsonbConfig;

/**
 *
 * @author LEVALLOIS
 */
public class Hello implements RequestHandler<Object, String> {

    public static void main(String[] args) {
        String input = "{\"key\":\"value\"}";
        new Hello().handleRequest(input, null);
    }

    @Override
    public String handleRequest(Object input, Context cntxt) {
        System.out.println("in the lambda");
        String data = input != null ? input.toString() : "{}";
        System.out.println("data is: " + data);

        JsonObjectBuilder job1 = Json.createObjectBuilder();
        job1.add("isBase64Encoded", false);
        job1.add("statusCode", 200);

        JsonObjectBuilder job2 = Json.createObjectBuilder();
        JsonObjectBuilder job3 = Json.createObjectBuilder();
        job3.add("key", "value");

        job2.add("Content-Type", "application/json");
        job1.add("headers", job2.build());
        job1.add("body", job3.build().toString());
        System.out.println(job1.build().toString());

        return job1.build().toString();
    }

}

【问题讨论】:

    标签: java aws-lambda aws-api-gateway


    【解决方案1】:

    尝试使用 lambda-events 中的 APIGatewayProxyResponseEvent 或创建自己的类。

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-events</artifactId>
        <version>2.2.9</version>
    </dependency>
    

    内部处理程序:

    public class MyHandler implements RequestHandler<Map<String, Object>, APIGatewayProxyResponseEvent> {
    
      @Override
      public APIGatewayProxyResponseEvent handleRequest(Map<String, Object> event, Context context) {
        return new APIGatewayProxyResponseEvent()
            .withStatusCode(200)
            .withBody("")
            .withIsBase64Encoded(false);
      }
    
    }
    

    【讨论】:

      【解决方案2】:

      抱歉,我无法回答这个问题。我来到这里试图找到或多或少相同问题的答案。希望以下内容对您有所帮助...

      我相信输出应该是带有双引号的有效 JSon 字符串等等?像这样,我在另一个 Stack Overflow 线程中找到了一个有效的例子?

      {"statusCode":200,"headers":{"Content-Type":"application/json"},"multiValueHeaders":null,"body":"{\"msg\":\"Welcome to Belarus! :)\"}","isBase64Encoded":false}
      

      但是当我尝试返回这个字符串时,它仍然会导致 502 错误。我还尝试了上面没有双引号正文结构和 4 个反斜杠的方法,这对我来说看起来不对,但这并没有帮助。以及该字符串的许多其他变体,但我总是收到 502 错误。

      我确实注意到,当我从 API 网关测试时,输出显示

      Sat Jan 11 22:53:42 UTC 2020 : Received response. Status: 200, Integration latency: 35 ms
      Sat Jan 11 22:53:42 UTC 2020 : Endpoint response headers: {Date=Sat, 11 Jan 2020 22:53:42 GMT, Content-Type=application/json, Content-Length=54, Connection=keep-alive, x-amzn-RequestId=9...}
      Sat Jan 11 22:53:42 UTC 2020 : Endpoint response body before transformations: "{\"statusCode\":200,\"body\":\"Welcome to xxx! :)\"}"
      Sat Jan 11 22:53:42 UTC 2020 : Execution failed due to configuration error: Malformed Lambda proxy response
      Sat Jan 11 22:53:42 UTC 2020 : Method completed with status: 502
      

      即我的响应消息正常,但是随后某些内容(方法响应选项卡?我很确定我从未更改过,并且工作示例未提及)随后尝试处理 JSON 并失败,因此更改了 statusCode到 502。但我不知道为什么它失败了。

      Json 需要包含什么?

      【讨论】:

      • 见我上面的回答。不确定这是实际问题,但似乎很有可能。
      【解决方案3】:

      在 API Gateway 控制台中进行更改后,我忘记了“重新部署”。所以 也许 我在 lambda 的响应中遇到了 json 的问题,但更可能的是我对我的 API 网关设置做了一些更改,因为我没有重新部署API 来解释这些变化。

      【讨论】:

        猜你喜欢
        • 2018-07-12
        • 2019-09-16
        • 2023-03-05
        • 1970-01-01
        • 2018-09-03
        • 1970-01-01
        • 2017-01-11
        • 2019-02-12
        • 2016-11-21
        相关资源
        最近更新 更多