BlockException异常统一处理
    springwebmvc接口资源限流入口在HandlerInterceptor的实现类AbstractSentinelInterceptor的preHandle方法中,对异常的处理是BlockExceptionHandler的实现类
    sentinel 1.7.1 引入了sentinel-spring-webmvc-adapter.jar
    自定义BlockExceptionHandler 的实现类统一处理BlockException

    1. @Slf4j
    2. @Component
    3. public class MyBlockExceptionHandler implements BlockExceptionHandler {
    4. @Override
    5. public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
    6. log.info("BlockExceptionHandler BlockException================"+e.getRule());
    7. R r = null;
    8. if (e instanceof FlowException) {
    9. r = R.error(100,"接口限流了");
    10. } else if (e instanceof DegradeException) {
    11. r = R.error(101,"服务降级了");
    12. } else if (e instanceof ParamFlowException) {
    13. r = R.error(102,"热点参数限流了");
    14. } else if (e instanceof SystemBlockException) {
    15. r = R.error(103,"触发系统保护规则了");
    16. } else if (e instanceof AuthorityException) {
    17. r = R.error(104,"授权规则不通过");
    18. }
    19. //返回json数据
    20. response.setStatus(500);
    21. response.setCharacterEncoding("utf-8");
    22. response.setContentType(MediaType.APPLICATION_JSON_VALUE);
    23. new ObjectMapper().writeValue(response.getWriter(), r);
    24. }
    25. }

    测试:
    BlockException异常统一处理 - 图1