0
点赞
收藏
分享

微信扫一扫

Zuul服务网关的自定义异常过滤器


在springcloud中,网关发生异常时,我们需要自定义返回的异常信息给用户看

那么我们就需要自定义异常过滤器了

首先我们需要停用内置的默认异常处理器SendErrorFilter,不然还是走的他默认的异常过滤器

在yml中的配置为:

zuul:
SendErrorFilter:
error:
disable: true

可以继承SendErrorFilter 类,也可以继承ZuulFilter类,实现结果都一样

package com.qiangqiang.filter;

import com.netflix.zuul.context.RequestContext;
import org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.ReflectionUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* \* Created with IntelliJ IDEA.
* \* @author: xiyue
* \* Date: 2021/1/12
* \* Time: 13:16
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Component
public class CustomSendErrorFilter extends SendErrorFilter {
@Override
public String filterType() {
return super.filterType();
}

@Override
public int filterOrder() {
return super.filterOrder();
}

@Override
public boolean shouldFilter() {
return super.shouldFilter();
}

@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletResponse response = ctx.getResponse();
try {
int responseStatusCode = ctx.getResponseStatusCode();
// 此处自定义响应体start
String cumstomBody = "{当前服务出现异常}";//内容省略...
// 此处自定义响应体end
response.setStatus(ctx.getResponseStatusCode());
response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
response.getOutputStream().write(cumstomBody.getBytes());
} catch (IOException e) {
ReflectionUtils.rethrowRuntimeException(e);
}
return null;
}
}


举报

相关推荐

0 条评论