自定义规则异常返回|学习笔记

简介: 快速学习自定义规则异常返回

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:自定义规则异常返回】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/684/detail/11880


自定义规则异常返回

 

内容介绍:

一、 课题引入

二、 数据填写步骤

三、 //异常处理页面

 

一.课题引入

根据规则不同,返回个性化的异常页面,通过 Sentinel 提供的 url block Handler一个接口,只要实现这个接口并实现里面的 Block 就可以拿到所有规则产生的异常,对这个异常进行判断,就知道那个规则导致的异常,通过自己的逻辑来返回对应的一个个性化界面。

 

二.数据填写步骤

示例:写 ExceptionHandlerpage 这类

复制名字到异常处理页面

②在config下面加一个 class,让它实现 url blockhandler 接下来将里面的 block 方法做出实现,就可以拿 request response 和 BlockException,这就是所有异常的分接口。

image.png

它有五个子类分别对应五个规则(子类如图)

(1)AuthorityException(授权的)

(2)DegradeException(降级的)

(3)FlowException(限流的)

(4)ParamFlowException(参数限流的)

(5)SystemBlockException(系统负载的)

③接下来通过对 BlockException 判断知道哪一种规则导致的异常接下来在图的基础上写下

if (e instanceof FlowException) {

这时候可以返回由于限流导致的异常,为了返回这个结果在封装一个

Class ResponseData{} 响应数据在这里面提供两个值一个 private int code;一个private String message;在响应数据上填上@Data

@AllArgsConstructor//这是全参构造在填一个无参构造 @NoArgsConstructor接下来就可以做异常了,

在填写 newponseData(code:-1,messagea:”接口被限流了…”)

同样接下来写 eles if(e instanceof FlowException){

再写一个降级的 }eles if(e instanceof DegradeException){

他的Data等于new ResponseData(code:-2,message:”借口被降级了…”);同样可以接着往下写。

④ 考虑如何将 newponseData(code:-1,messagea:”接口被限流了…”)返回去

首先做一个声明 ResponseData 放在外面,ResponseData=null;之后ResponseData=newponseData(code:-1,messagea:”接口被限流了…”)

ResponseData=new ResponseData(code:-2,message:”借口被降级了…’’)接下来将response写回去,可以用相应写 response.getwriter().writer(); 现在这是一个对象最好将他转成结对状再往回写,写response.getwriter().writer(JOSN.toJOSNString(responseData))注意这么写会有中文乱码的问题,为了处理乱码问题加一个reponse.setContentType(“application/Json;charset=utf-8’’);这个定义就定义好了。

⑤接下来@Component我们的容器里面,到这一步自定义异常返回页面就写完了。

⑥启动程序接下来访问message1,对他设置规则找到簇点链路找到message1设置一个流控规则发现接口被限流了,把他删掉重新降级规则规则

运行出现接口被降级了,可以根据这个返回结果去判断哪里异常了。

 

三.//异常处理页面

@component

Public class ExceptionHandlerpage implents url Block Handler {

//Block Exception 异常接口,包含sentinel 的五个异常

// Flow Exception限流异常

//Degrade Exception 降级异常

//Param Flow Exception 参数限流异常

//Authority Exception 授权异常

//System Block Exception  系统负载异常

@override

Publicvoidblock(HttpServletRequestrequest, HttpServletResponse response,BlockException e) throws IoException {

Response.setContentType(“application/json;charset=utf-8”);

ResponseData data=null;

if (e instanceof FlowException) {

data=new ResponseData(-1,”接口被限流了… ”);

} else if (e instanceof Degr adeException) {

data=new ResponseData(-2,“接口被降级了…”);

}

response.getwriter().write(JSON.toJSONString(data));

}

}

@Data

@AllArgsConstructor//全参构造

@NoArgsConstructor

//无参构造

Class ResponseData {

Private int code;

Private String message;

}

相关文章
|
7月前
Turndown 源码解析:二、规则
Turndown 源码解析:二、规则
67 0
|
1月前
|
Prometheus Kubernetes 监控
告警规则设置方法
告警规则设置方法
42 3
|
5月前
|
前端开发 Java Spring
设置响应内容类型的几种方法比较
设置响应内容类型的几种方法比较
|
7月前
|
Java
log4j异常日志过滤规则配置
log4j异常日志过滤规则配置
264 0
|
7月前
|
JSON Java API
java 写一个循环不断请求接口A判断返回值是否符合条件,不符合等待30秒继续请求判断
java 写一个循环不断请求接口A判断返回值是否符合条件,不符合等待30秒继续请求判断
224 0
|
7月前
|
数据格式 Python
添加 自定义校验方法,让用户自定义校验规则
添加 自定义校验方法,让用户自定义校验规则
84 0
过滤器简介--操作步骤--过滤器生命周期--过滤器匹配规则-- 过滤器链
过滤器简介--操作步骤--过滤器生命周期--过滤器匹配规则-- 过滤器链
71 0
|
小程序 UED
小程序审核规则大致内容
小程序审核规则大致内容
小程序审核规则大致内容
|
PHP 开发者
函数规则|学习笔记
快速学习函数规则
|
Java Apache Maven
获取自定义配置的值|学习笔记
快速学习获取自定义配置的值