为 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;
}