AWS API Gateway 集成响应

Posted

技术标签:

【中文标题】AWS API Gateway 集成响应【英文标题】:AWS API Gateway Integration Response 【发布时间】:2018-06-09 01:47:14 【问题描述】:

我正在使用 AWS Lambda 和 API Gateway,但我的 API 响应代码存在问题, 如果出现异常,我在响应中将 responseCode 设置为 400, 但是 API 状态是 200。

我发现我的解决方案与 AWS API Gateway 的集成响应有关, 我创建了我的应用程序需要的所有可能的 Http 状态代码, 我在集成响应中设置了 Lambda 错误正则表达式, 但是,尽管我在我的 API 响应中发送了“responseCode”:“400”(响应类型是 Java 中的 JsonObject),但我仍然得到 API 状态为 200。

我有以下代码 AWS Lambda 代码, 我将 ErrorCode 作为查询参数传递给我的 Get 方法, 并返回相同的错误代码作为响应,例如。 “响应代码”:“400”。

我的预期输出是 "responseCode" : "400" 但是,API 的状态也应该变成 400 而不是 200。

public class MainHandler implements RequestHandler<JSONObject, JSONObject> 

    public JSONObject handleRequest(JSONObject request, Context context) 

        try 
            JSONObject requestJson = (JSONObject) new JSONParser().parse(request.toString());
            System.out.println("RequestJson : " + requestJson);

            JSONObject params = (JSONObject) requestJson.get("params");
            System.out.println("Params : " + params);

            JSONObject queryString = (JSONObject) params.get("querystring");
            System.out.println("QueryString : " + queryString);

            String error = (String) queryString.get("errorCode");
            System.out.println("ErrorCode : " + error);

            JSONObject resp = new JSONObject();
            resp.put("responseCode", error);

            return resp;
         catch (Exception e) 
            e.printStackTrace();
            return null;
        
    

AWS API Gateway 方法响应 -

-

邮递员回应 - API 状态显示 200 Ok,而我希望它为 400。

我指的是以下链接 - 1.https://forums.aws.amazon.com/thread.jspa?threadID=192918 2.Is there a way to change the http status codes returned by Amazon API Gateway?

【问题讨论】:

【参考方案1】:

您的 Lambda 错误正则表达式不是正则表达式。将其更改为.*"responseCode":\s"400".* 应该可以。

但对于该用例,最好激活Lambda proxy integration。这提供了一种更灵活的方式来直接从 lambda 函数设置响应代码。

【讨论】:

嗨,它不起作用:/,我添加了集成响应的屏幕截图 也许问题在于您的功能没有失败。尝试抛出类似throw new Exception("code 400") 的错误并将lambda 错误正则表达式设置为.*code\s400.*(文档docs.aws.amazon.com/lambda/latest/dg/java-exceptions.html 和docs.aws.amazon.com/apigateway/latest/developerguide/…)

以上是关于AWS API Gateway 集成响应的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda 和 API Gateway 响应集成问题

AWS API Gateway - Lambda 代理(集成请求) - 内部服务器错误

使用 AWS API Gateway 和 Java 处理错误响应状态代码/实体

将 AWS Lambda 429 错误映射到 API Gateway 2XX 响应

响应未定义 - aws-api-gateway-client

如何使用 AWS CloudFormation 在 AWS API Gateway 集成中指定阶段变量?