java - AWS API Gateway 集成响应

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

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

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

我有以下代码 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 方法响应 - enter image description here

AWS API Gateway 集成响应 - enter image description here

postman 响应 -
API 状态显示 200 Ok,而我希望它为 400。 enter image description here

我指的是以下链接 -
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?

最佳答案

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

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

关于java - AWS API Gateway 集成响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48008711/

相关文章:

java - 保留/读取 ZIP 中的 xml 内容,保持正确的编码

java - 在 Java 8 中,可以使 HttpsURLConnection 发送服务器名称指示(SNI)

ruby - 错误 : failed to build gem native extension, Linux 虚拟机

amazon-web-services - aws cli cloudformation lambda无效输入错误

amazon-web-services - Cloudformation:一起使用 Fn::Join 和 Fn:GetAtt

java - PCMU 到 WAV 转换

amazon-web-services - 使用 Spring Cloud AWS 自动配置承担角色

json - AWS Step Function - 向传递状态类型添加动态值

java - 如何在 AWS Lambda 中调整 Java 垃圾收集器

java - 关闭 Wildfly/Jboss AS : prevent org. jboss.as.ejb3.component.EJBComponentUnavailableException