Spring Cloud Alibaba 教程(基于首个毕业版)(十三):扩展Sentinel- 错误页面优化

本文实现sentinel对错误页面的优化

一、为什么要扩展?

在项目的实际开发中,我们在对接口限流和降级等等设定规则之后,一旦达到阈值之后页面就会给一段话,对于使用人员来说是很不友好的,所以我们需要来定义一个统一的返回

二、实现

2.1 创建一个统一返回的类

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class ErrorMsg {
    
    private Integer status;
    private String msg;

}

2.2  创建类实现UrlBlockHandler 

@Component
public class MyUrlBlockHandler implements UrlBlockHandler {

    @Override
    public void blocked(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException ex) throws IOException {
        ErrorMsg errorMsg = null;
        if (ex instanceof FlowException) {
            // 流控异常
             errorMsg = ErrorMsg.builder()
                    .status(100)
                    .msg("限流异常")
                    .build();

        }else if (ex instanceof DegradeException) {
            // 降级异常
            errorMsg = ErrorMsg.builder()
                    .status(101)
                    .msg("降级异常")
                    .build();

        }else if (ex instanceof ParamFlowException) {
            // 热点异常
            errorMsg = ErrorMsg.builder()
                    .status(102)
                    .msg("热点异常")
                    .build();

        }else if (ex instanceof SystemBlockException) {
            // 系统异常
            errorMsg = ErrorMsg.builder()
                    .status(103)
                    .msg("系统异常")
                    .build();

        }else if (ex instanceof AuthorityException) {
            // 授权异常
            errorMsg = ErrorMsg.builder()
                    .status(104)
                    .msg("授权异常")
                    .build();

        }
        httpServletResponse.setStatus(500);
        httpServletResponse.setCharacterEncoding("utf-8");
        httpServletResponse.setHeader("Content-Type","application/json;charset=utf-8");
        httpServletResponse.setContentType("application/json;charset=utf-8");
        new ObjectMapper()
                .writeValue(
                        httpServletResponse.getWriter(),
                        errorMsg
                );
    }
}

 

三、验证

3.1启动项目

3.2 添加规则

3.3 刷新请求验证


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值