sentinel找不到UrlBlockHandler接口解决方法
sentinel找不到UrlBlockHandler接口解决方法
最近在学习springcloud alibaba时候,需要sentinel进行流量管理控制,在统一处理返回异常时候,网上大多数教程都是继承UrlBlockHandler这个方法,但是我在sentinel 1.8版本时候并没有找到这个接口,于是找了附近的源码,发现官方改成了BlockExceptionHandler这个接口与实现。
解决方案: 继承BlockExceptionHandler接口
具体代码如下:
package com.sentinel; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import com.Enum.RequestMsgEnum; import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler; import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException; import com.alibaba.csp.sentinel.slots.block.flow.FlowException; import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException; import com.alibaba.csp.sentinel.slots.system.SystemBlockException; import com.fasterxml.jackson.databind.ObjectMapper; import com.global.BaseController; /** * 自定义sentinel异常返回信息 */ @Component public class MyUrlBlockHandler extends BaseController implements BlockExceptionHandler{ @Override public void handle(HttpServletRequest request, HttpServletResponse response, BlockException ex) throws Exception { String msg = null; if (ex instanceof FlowException) { msg = "限流了"; } else if (ex instanceof DegradeException) { msg = "降级了"; } else if (ex instanceof ParamFlowException) { msg = "热点参数限流"; } else if (ex instanceof SystemBlockException) { msg = "系统规则(负载/...不满足要求)"; } else if (ex instanceof AuthorityException) { msg = "授权规则不通过"; } // http状态码 response.setStatus(500); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Type", "application/json;charset=utf-8"); response.setContentType("application/json;charset=utf-8"); // spring mvc自带的json操作工具,叫jackson new ObjectMapper() .writeValue( response.getWriter(), this.responseResult(RequestMsgEnum.Failtrue, msg) ); } }
注意:BaseController 此类是我自己写的定义类,自定义格式返回给前端,需要根据自己的需要修改
上一篇:
IDEA上Java项目控制台中文乱码