我正在使用通过JHipster(Spring Boot,Zuul Proxy,Ribbon ...)创建的微服务架构。我有2个微服务和一个网关(当然还有一个注册表)。
从我的微服务发送HTTP错误时遇到问题。网关似乎忽略了微服务的响应,并仅使用错误代码生成新的响应。
示例:
我的请求在我的微服务中生成HTTP 404。如果直接请求微服务我有以下响应体:
{
"code": "DEVICE_NOT_FOUND",
"message": "Gateway '12345678' unknown"
}
如果我请求网关(转移到微服务),我现在拥有以下正文而不是服务生成的正文:
{
"timestamp": "2016-08-11T12:50:57.432+0000",
"status": 404,
"error": "Not Found",
"message": "No message available"
}
来自网关的正文不包含来自licroservice错误正文的任何数据......
如果我理解,当网关从网络摄像头获取错误时,它会调用生成的“/ error”控制器来创建响应。我试图实现我自己的/错误控制器,因为我无法获得原始的身体。我还尝试添加一个@ControllerAdvice控制器但在网关中没有返回异常,它只是重定向到/错误控制器
我错过了什么吗? 在此先感谢您的帮助。
答案 0 :(得分:1)
@GaëlMarziou好的,我发现它是如何工作的。
有一个Zuul过滤器(org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter)捕获微服务响应体并调用ErrorController生成自己的一个。我创建了一个Zuul过滤器(show the solution here)并覆盖了whitelabel错误控制器(solution here),现在我的网关中有微服务的响应体。
感谢您的帮助。