【问题标题】:Serverless Lambda Proxy Integration using request validation model - how to get detailed validation error response使用请求验证模型的无服务器 Lambda 代理集成 - 如何获得详细的验证错误响应
【发布时间】:2019-08-21 17:48:01
【问题描述】:

我正在通过模型验证请求的负载 - 请参阅下面的 serverless.yml 摘录:

functions:
  authorizer:
    handler: src/authorization/authorizer.general
  activity:
    handler: src/resources/activity.submit
    events:
    - http:
        path: /tenant/{tenant}/activities
        method: POST
        cors: true
        authorizer: ${self:custom.authorizer.general}
        request:
          schema:
            application/json: ${file(models/activity.json)

一切正常,但与架构不匹配的有效负载的验证响应是:

{
    "message": "Invalid request body"
}

我尝试添加响应模板,但收到一条警告说“响应”将被删除(这是 lambda 代理集成,而不是 lambda 集成)。

如何让 API Gateway 在这种情况下(即 Lambda 代理集成)给出详细的验证错误消息响应?

任何帮助将不胜感激,因为我在网上找不到任何相关的东西。

【问题讨论】:

    标签: aws-lambda aws-api-gateway serverless-framework


    【解决方案1】:

    我通过添加网关响应来覆盖默认的错误请求正文响应找到了解决方案。不幸的是,从无服务器 1.50.0 开始,不直接支持此功能(请参阅 github issue

    但能够通过无服务器资源(即 Cloudformation)添加网关响应(参见上面的链接):

    resources:
      Resources:
        ApiGatewayRestApi:
          Type: AWS::ApiGateway::RestApi
          Properties:
            Name: ${self:provider.stage}-${self:service}
        GatewayResponseResourceNotFound:
          Type: 'AWS::ApiGateway::GatewayResponse'
          Properties:
            RestApiId:
              Ref: 'ApiGatewayRestApi'
            ResponseType: BAD_REQUEST_BODY
            "StatusCode" : "422"
            ResponseTemplates:
              application/json: "{\"message\": \"$context.error.message\", \"error\": \"$context.error.validationErrorString\"}"
    

    注意:我无法找到指示哪个属性未通过验证的方法,但至少验证消息更详细一些

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 2019-10-26
      • 2012-03-04
      相关资源
      最近更新 更多