从AWS API Gateway访问AWS Lambda时,“输入值不能为空”

时间:2018-01-12 12:04:48

标签: amazon-web-services aws-lambda aws-api-gateway

我正在使用Lambda代理集成从API网关执行lambda。以下是我在Java中的相同代码。我的lambda正在从Eclipse和AWS控制台正确执行。我假设这应该与我的API网关的配置。我创建了一个POST方法并定义了一个模型。

但是当我从API网关尝试“测试”选项时,我收到“内部错误”:{“errorMessage”:“输入值不能为空”,“errorType”:“java.lang.IllegalArgumentException”并且“由于配置错误导致执行失败:格式错误的Lambda代理响应”。

public class SavePersonHandler implements RequestHandler<PersonRequest, JSONObject> {

    private DynamoDB dynamoDb;
    JSONParser parser = new JSONParser();
    private String DYNAMODB_TABLE_NAME = "XXXX";
    private Regions REGION = Regions.US_WEST_2;

    public JSONObject handleRequest(UserRequest userRequest, Context context) {
        this.initDynamoDbClient();
        LambdaLogger logger = context.getLogger();
        String responseCode = "200";

        JSONObject responseJson = new JSONObject();

        saveData(personRequest); // inserting data into DynamoDB
        UserResponse userResponse = new UserResponse();
        try {

            //Getting the recently inserted data back from DynamoDB
            Item item = this.dynamoDb.getTable(DYNAMODB_TABLE_NAME).getItem("id", personRequest.getId(), "id, firstName, lastName, age, address", null);

            personResponse.setMessage("Saved Successfully-"+item.toJSON());
            JSONObject responseBody = new JSONObject();
            responseBody.put("message", item.toJSON());

            JSONObject headerJson = new JSONObject();
            headerJson.put("x-custom-header", "custom header value");
            responseJson.put("isBase64Encoded", false);
            responseJson.put("statusCode", responseCode);
            responseJson.put("headers", headerJson);
            responseJson.put("body", responseBody.toString()); 

        }
        catch (Exception e) {
            System.err.println("GetItem failed.");
            System.err.println(e.getMessage());
        }

        return responseJson;
     }

1 个答案:

答案 0 :(得分:0)

Unable to integrate API gateway with aws lambda帮助解决了这个问题。

响应必须直接作为POJO对象发回,而不是序列化POJO并将其作为String发回。这就是我开始工作的方式。