api gateway -> ec2 (using spring mvc) . 我想返回 200 以外的 http 状态。在谷歌搜索了很多之后,我知道我-6ren">
gpt4 book ai didi

amazon-web-services - AWS API 网关, "HTTP status regex"中的 "Integration Response"无法匹配任何字符串

转载 作者:行者123 更新时间:2023-12-04 08:07:35 24 4
gpt4 key购买 nike

一些背景信息:我的设置是 browser -> api gateway -> ec2 (using spring mvc) .
我想返回 200 以外的 http 状态。在谷歌搜索了很多之后,我知道我在 api 网关上做了一些配置。以下是我的配置:

  • Method Response , 添加 http 状态 400
  • Integration Response -> HTTP status regex , 添加 .*httpStatus":400.*
  • 在 ec2(使用 spring mvc)中,我总是返回 http 状态 400 并使用以下 json 作为响应主体(用于测试)

    {
    "errorMessage": "{\"errorType\":\"Bad Request\",\"requestId\":\"12345\",\"httpStatus\":400,\"message\":\"you got error\"}"
    }


  • 但是,当我测试 api 时(使用 api 网关中的“测试”按钮),它仍然返回 http 状态 200。(我希望它应该是 400)
    当我将正则表达式更改为 .*400.* 时,它按预期返回 http 状态 400。
    当我将正则表达式更改为 .*httpStatus.* 时,它返回 http 状态 200。(我希望它应该是 400)

    为什么正则表达式不能 .*httpStatus":400.*认出我的json?即使我将正则表达式简化为 .*httpStatus.* .
    但是正则表达式 .*400.*可以识别int 400 ...

    PS:我永远不会忘记在api网关上进行任何更改后部署api

    这是日志
    Execution log for request test-request  
    Wed Jul 13 15:38:22 UTC 2016 : Starting execution for request: test-invoke-request
    Wed Jul 13 15:38:22 UTC 2016 : HTTP Method: POST, Resource Path: /graphql
    Wed Jul 13 15:38:22 UTC 2016 : Method request path: {}
    Wed Jul 13 15:38:22 UTC 2016 : Method request query string: {}
    Wed Jul 13 15:38:22 UTC 2016 : Method request headers: {}
    Wed Jul 13 15:38:22 UTC 2016 : Method request body before transformations: null
    Wed Jul 13 15:38:22 UTC 2016 : Endpoint request URI: http://awseb-e-e-AWSEBLoa-1OSQBKG0O3J75-968940376.ap-northeast-1.elb.amazonaws.com/graphql
    Wed Jul 13 15:38:22 UTC 2016 : Endpoint request headers: {x-amzn-apigateway-api-id=kymhygbqwa, Accept=application/json, User-Agent=AmazonAPIGateway_kymhygbqwa}
    Wed Jul 13 15:38:22 UTC 2016 : Endpoint request body after transformations: null
    Wed Jul 13 15:38:22 UTC 2016 : Endpoint response body before transformations: {"errorMessage":"{\"errorType\":\"Bad Request\",\"requestId\":\"12345\",\"httpStatus\":400,\"message\":\"you got error\"}"}
    Wed Jul 13 15:38:22 UTC 2016 : Endpoint response headers: {date=Wed, 13 Jul 2016 15:38:22 GMT, server=Apache-Coyote/1.1, expires=0, transfer-encoding=chunked, access-control-allow-headers=Origin, X-Requested-With, Content-Type, Accept, x-frame-options=DENY, access-control-allow-methods=POST, GET, PUT, OPTIONS, DELETE, pragma=no-cache, access-control-allow-origin=*, access-control-max-age=3600, x-content-type-options=nosniff, x-xss-protection=1; mode=block, content-type=application/json;charset=UTF-8, connection=keep-alive, cache-control=no-cache, no-store, max-age=0, must-revalidate}
    Wed Jul 13 15:38:22 UTC 2016 : Method response body after transformations: {"errorMessage":"{\"errorType\":\"Bad Request\",\"requestId\":\"12345\",\"httpStatus\":400,\"message\":\"you got error\"}"}
    Wed Jul 13 15:38:22 UTC 2016 : Method response headers: {Content-Type=application/json}
    Wed Jul 13 15:38:22 UTC 2016 : Successfully completed execution
    Wed Jul 13 15:38:22 UTC 2016 : Method completed with status: 200

    最佳答案

    您缺少一个关键要素:

    对于 HTTP 和 AWS 集成,错误模式与 匹配HTTP 状态码 的集成响应。对于 Lambda“调用”集成,针对响应中“errorMessage”字段的错误模式。

    您将需要使用来自 SpringMVC 端点的响应状态代码来控制 API 网关响应。

    作为引用,这个智慧金块隐藏在第 5.b 节 here 中。 :

    另请参阅有关错误映射的一些更精细点的博客文章 here

    关于amazon-web-services - AWS API 网关, "HTTP status regex"中的 "Integration Response"无法匹配任何字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357594/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com