请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于限流抛出自定义限流异常的问题

异常枚举
@Getter
public enum ExceptionEnum {
    RATERLIMIT_NO(1, "暂时没有获取到令牌,请稍后再试"),;

    private Integer code;
    private String message;

    ExceptionEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

}

自定义限流异常

public class RateLimitException extends RuntimeException {

    private Integer code;

    public RateLimitException(int code, String message) {
        super(message);
        this.code = code;
    }
}

限流过滤器

@Component
public class RateLimitFilter extends ZuulFilter {

    private static final RateLimiter RATE_LIMITER = RateLimiter.create(1);

    @Override
    public String filterType() {
        return PRE_TYPE;
    }

    @Override
    public int filterOrder() {
        return SERVLET_DETECTION_FILTER_ORDER - 1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {

        if (!RATE_LIMITER.tryAcquire()) {
            throw new RateLimitException(ExceptionEnum.RATERLIMIT_NO.getCode()
                    , ExceptionEnum.RATERLIMIT_NO.getMessage());
        }
        return null;
    }
}

测试结果

{
    "timestamp": 1531967665138,
    "status": 500,
    "error": "Internal Server Error",
    "exception": "com.netflix.zuul.exception.ZuulException",
    "message": "pre:RateLimitFilter"
}

疑问:为什么抛出的异常不是自定义的异常,message不应该是自定义的“暂时没有获取到令牌,请稍后再试
”信息么??师兄能解惑一下么?感谢师兄

正在回答 回答被采纳积分+3

1回答

wirechen 2018-07-19 23:40:00

500错误很好定位的,你用debug排除一下看是哪里逻辑代码出错了

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_谜00016_0 #1
    不是错误
    哥,我这是自己抛出的异常啊
    回复 有任何疑惑可以回复我~ 2018-07-20 19:49:30
  • wirechen 回复 提问者 qq_谜00016_0 #2
    喔喔 是我看错了。因为你没有写异常捕获类对你的自定义异常进行封装
    回复 有任何疑惑可以回复我~ 2018-07-20 19:54:10
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信