当前位置: 首页 > 知识库问答 >
问题:

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

孔弘盛
2023-03-14

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

但是,当我从API Gateway中尝试“test”选项时,我得到了“内部错误”:{“errorMessage”:“input value murnt null”,“errorType”:“java.lang.IllegalArgumentException”}和“Execution failed duction to configuration error:Malformed Lambda proxy response”。

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个答案

蔚桐
2023-03-14

无法将API网关与aws集成,lambda帮助解决了这个问题。

响应必须直接作为POJO对象发送回来,而不是序列化POJO并将其作为字符串发送回来。我就是这样让它工作的。

 类似资料:
  • 问题内容: 我有一个UIAlertController,当用户在TouchID屏幕上选择“输入密码”时,系统会提示用户。在屏幕上显示此内容后,如何恢复用户的输入? 我知道“确定”按钮可能应该有一个处理程序,但是现在此代码实际上并没有执行任何操作,但是我想通过println显示文本字段的输出。对于我来说,这实际上只是一个测试应用程序,用于学习Swift和一些新的API知识。 问题答案: 我知道已经发

  • 我们正在尝试从C#Windows服务调用AWS API网关来执行后台作业。哪个应该触发API网关定期初始化请求? 我们使用RestSharp调用APIendpoint,该类称为AwsAuthenticator,它继承自RestSharp.Authenticators.IAAuthenticator。但当我们调用API Gateway时,收到的错误是“我们计算的请求签名与您提供的签名不匹配。请检查您

  • 我需要从endpoint获取一些数据,然后根据响应将这些数据存储到数据库中。

  • 问题内容: 我要做什么 因此,我一直在尝试在Linux中访问键盘输入。具体来说,我需要能够在 不 按下其他键的 情况下 访问修饰键。此外,我希望能够在不运行X系统的 情况下 执行此操作。 简而言之,我的要求是: 在Linux上工作 不需要X11 无需 按下任何其他键 即可 检索修饰键 这包括以下键: 转移 控制 Alt键 我所需要的只是一个简单的方法,让我知道在检查键盘时是否按住了该键 我的电脑设

  • 我试图弄清楚如何从运行在VPC中的lambda访问Api网关服务Api(也称为“管理Amazon Api网关”)。不,我不是试图在私有API中调用资源方法(我知道如何创建VPC接口endpoint),只是调用AWS服务方法(,FWIW,使用Python boto3客户机)。希望这是有意义的,很难清楚地表达这与如此多的“API”重载在这里。当前的尝试以超时失败,所以我认为这是与VPC相关的,但我不确

  • 此url位于AWS API网关中,方法为get,stage部署良好。我在aws文档之后启用了CORS。 -资源->操作->启用CORS->默认设置->启用CORS并替换CORS头。在CORS结果中没有错误日志。 我不是profesional web开发人员,我的浏览器是Safari。 以下是我查询“http://my.com”的代码 控制台打印错误:XMLHttpRequest不能加载“http: