【问题标题】:KrakenD - prevent changing responseKrakenD - 防止改变响应
【发布时间】:2021-10-04 15:22:48
【问题描述】:

我是 KrakenD 的新手。我尝试将此 API 网关配置为不修改来自后端的响应。以下是 ma 配置的摘录:

"endpoint": "/mycompany/someservice/{id}",
         "output_encoding": "no-op",
         "backend": [{
                 "url_pattern": "/someservice/{id}",
                 "host": [
                     "http://host-in-our-company:8080"
                 ],
                 "encoding": "no-op"
             }
         ]
     }

在这个 GET 请求中,我们询问了一些实体。当实体不存在时,我们的 Spring 应用程序会抛出异常并返回状态 404。没有 KrakenD 的原始响应如下所示:

    "timestamp": "2021-10-04T14:47:58.918+00:00",
    "status": 404,
    "error": "Not Found",
    "path": "/mycompany/someservice/115_EXIST"
}

但是当我使用 KrakenD 时,响应如下:

{
    "cause": "Entity with id 115 cannot be found.",
    "status": "NOT_FOUND"
}

这对应于找不到实体时抛出的异常:

ERROR com.my.company.exception.GlobalRestExceptionHandler - Error caught: Entity with id 115 cannot be found.

如何配置 KrakenD 来实现这种行为?或者也许我应该以某种方式改变我们后端的实现?

提前感谢您的帮助

【问题讨论】:

    标签: exception configuration krakend


    【解决方案1】:

    no-op 编码不会对后端响应进行任何修改。您看到的响应是来自后端的实际响应,没有来自 KrakenD 的任何干预。

    请注意,通过 KrakenD 使用内容与直接使用后端不同,因为 KrakenD 不会将任何标头、查询参数或 cookie 传递给后端,除非您这样说。例如,您的后端可能需要客户端发送的 Accept 标头,但除非您在配置中转发它,否则它不会到达后端(请参阅文档中的 headers_to_pass)。这是使后端响应不同的常见问题的示例。在触发此错误消息时查看您的后端代码,并尝试使用curl直接使用后端

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 2019-11-08
      • 2014-11-23
      • 1970-01-01
      相关资源
      最近更新 更多