我正在使用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;
}
答案 0 :(得分:0)
Unable to integrate API gateway with aws lambda帮助解决了这个问题。
响应必须直接作为POJO对象发回,而不是序列化POJO并将其作为String发回。这就是我开始工作的方式。