为 zuul 转发错误设置自定义错误
Set custom error for zuul forwading error
我是微服务的新手,我已经为 API 网关配置了 zuul,为服务注册表配置了 Eureka,并且我注册了 3 个微服务并且 运行 通过 zuul API 没有任何问题网关,但是当我手动关闭一项服务并尝试通过 zuul 访问时,它给出了 500 个内部服务器错误。
错误信息。
{
"timestamp": 1568197371584,
"status": 500,
"error": "Internal Server Error",
"message": "route:RibbonRoutingFilter"
}
但我想要的是提供自定义错误消息,例如 "this service is not working",状态代码为 406。
我试过这个方法,走几步就迷路了
@Configuration
public class HystrixFallbackConfiguration {
@Bean
public FallbackProvider zuulFallbackProvider() {
return new FallbackProvider() {
@Override
public String getRoute() {
return "image_service";
}
@Override
public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
return null;
}
};
}
}
我认为您需要将 filterType 设置为错误的 Zuulfilter。您可以参考以下代码。通过这种方式,您将能够使用 msg.
记录自定义异常
public class CustomErrorFilter extends ZuulFilter {
private static final Logger LOG = LoggerFactory.getLogger(CustomErrorFilter.class);
@Override
public String filterType() {
return "post";
}
@Override
public int filterOrder() {
return -1;
}
@Override
public boolean shouldFilter() {
RequestContext ctx=RequestContext.getCurrentContext();
if(ctx.getThrowable()!=null)
return true;
else
return false;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
ctx.setThrowable(null); // response is not returned unless
throwable is set to null.
ctx.remove("error.status_code");
ctx.setResponseBody(“Error”);
ctx.getResponse().setContentType("text/plain");
ctx.setResponseStatusCode(400);
}
return null;
}
我是微服务的新手,我已经为 API 网关配置了 zuul,为服务注册表配置了 Eureka,并且我注册了 3 个微服务并且 运行 通过 zuul API 没有任何问题网关,但是当我手动关闭一项服务并尝试通过 zuul 访问时,它给出了 500 个内部服务器错误。
错误信息。 { "timestamp": 1568197371584, "status": 500, "error": "Internal Server Error", "message": "route:RibbonRoutingFilter" }
但我想要的是提供自定义错误消息,例如 "this service is not working",状态代码为 406。
我试过这个方法,走几步就迷路了
@Configuration
public class HystrixFallbackConfiguration {
@Bean
public FallbackProvider zuulFallbackProvider() {
return new FallbackProvider() {
@Override
public String getRoute() {
return "image_service";
}
@Override
public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
return null;
}
};
}
}
我认为您需要将 filterType 设置为错误的 Zuulfilter。您可以参考以下代码。通过这种方式,您将能够使用 msg.
记录自定义异常public class CustomErrorFilter extends ZuulFilter {
private static final Logger LOG = LoggerFactory.getLogger(CustomErrorFilter.class);
@Override
public String filterType() {
return "post";
}
@Override
public int filterOrder() {
return -1;
}
@Override
public boolean shouldFilter() {
RequestContext ctx=RequestContext.getCurrentContext();
if(ctx.getThrowable()!=null)
return true;
else
return false;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
ctx.setThrowable(null); // response is not returned unless
throwable is set to null.
ctx.remove("error.status_code");
ctx.setResponseBody(“Error”);
ctx.getResponse().setContentType("text/plain");
ctx.setResponseStatusCode(400);
}
return null;
}