我是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应用程序抛出and异常,并返回状态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来实现此行为?或者也许我应该以某种方式改变我们后端的实现?
提前感谢您的帮助
发布于 2021-10-05 13:18:10
no-op编码不会对后端响应执行任何修改。您看到的响应是来自后台的实际响应,没有任何来自KrakenD的干预。
请注意,通过KrakenD消费内容并不等同于直接消费后端,因为KrakenD不会将任何头部、查询参数或cookie传递给后端,除非您这样做。例如,您的后端可能期望客户端发送一个Accept标头,但除非您在配置中转发它,否则它不会到达后端(请参阅文档中的headers_to_pass )。这是一个导致后端响应不同的常见问题的示例。在后端代码中查看何时触发此错误消息,并尝试使用curl直接使用后端
https://stackoverflow.com/questions/69438532
复制相似问题