由于配置错误,执行失败:Java 中的 Lambda 代理响应格式错误

sei*_*cle 5 java aws-lambda aws-api-gateway

我的函数是通过代理 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
Run Code Online (Sandbox Code Playgroud)

响应应该是字符串化的 JSON,并且应包含状态代码、正文和标头。所有这些都包含在下面,但由于配置错误,我仍然收到 Execution failed: Malformed Lambda proxy response。帮助?

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

Ser*_*erg 7

尝试使用APIGatewayProxyResponseEventlambda-events 或创建您自己的类。

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-events</artifactId>
    <version>2.2.9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

和内部处理程序:

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);
  }

}
Run Code Online (Sandbox Code Playgroud)


sei*_*cle 0

在 API Gateway 控制台中进行更改后,我忘记了“重新部署”。因此,也许我的 lambda 响应中的 json 存在问题,但更可能的是我对 API 网关设置做了一些更改,但这些更改没有被考虑在内,因为我没有重新部署 API 来考虑这些更改。