【发布时间】:2016-07-27 11:13:42
【问题描述】:
我在 Zuul 中有一个场景,其中路由 URL 的服务也可能关闭。因此,响应主体在 JSON 主体响应中被抛出 500 HTTP 状态和 ZuulException。
{
"timestamp": 1459973637928,
"status": 500,
"error": "Internal Server Error",
"exception": "com.netflix.zuul.exception.ZuulException",
"message": "Forwarding error"
}
我要做的就是自定义或删除 JSON 响应,并可能更改 HTTP 状态代码。
我尝试使用@ControllerAdvice 创建异常处理程序,但处理程序未捕获异常。
更新:
所以我扩展了 Zuul 过滤器,我可以看到它在执行错误后进入运行方法,那么我该如何更改响应。以下是我到目前为止所得到的。我在某处读到了有关 SendErrorFilter 的信息,但我如何实现它以及它有什么作用?
public class CustomFilter extends ZuulFilter {
@Override
public String filterType() {
return "post";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
final RequestContext ctx = RequestContext.getCurrentContext();
final HttpServletResponse response = ctx.getResponse();
if (HttpStatus.INTERNAL_SERVER_ERROR.value() == ctx.getResponse().getStatus()) {
try {
response.sendError(404, "Error Error"); //trying to change the response will need to throw a JSON body.
} catch (final IOException e) {
e.printStackTrace();
} ;
}
return null;
}
将此添加到具有@EnableZuulProxy 的类中
@Bean
public CustomFilter customFilter() {
return new CustomFilter();
}
【问题讨论】:
-
你有没有尝试过?
-
我尝试通过使用 @ControllerAdvice 注释类来添加异常处理程序,但这似乎不起作用。我想我需要用 Zuul 过滤器做一些事情,但不确定需要发生什么。
-
好的,那么最好编辑您的问题以便进行此尝试,因为您会注意到有些反对者认为您自己没有尝试过任何事情。如果你改进了这个问题,我会给你我的 +1,因为我认为这是一个有趣的主题。
-
完成更新问题。
-
编写自定义
ErrorController实现也可以帮助某人解决转发错误:jmnarloch.wordpress.com/2015/09/16/…
标签: java spring-boot spring-cloud microservices netflix-zuul