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

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

开发者学堂课程【全面讲解 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;

}

相关文章
|
4月前
|
文字识别 Java
文本,文字识别12,接口返回值和异常封装,一个好的接口,应该包括,错误码,提示信息,返回的数据,应该知道出错,错在哪里,抛出业务异常应该怎样解决?出现业务异常的时候,抛出业务异常,全局异常处理
文本,文字识别12,接口返回值和异常封装,一个好的接口,应该包括,错误码,提示信息,返回的数据,应该知道出错,错在哪里,抛出业务异常应该怎样解决?出现业务异常的时候,抛出业务异常,全局异常处理
|
6月前
|
JSON Java API
java 写一个循环不断请求接口A判断返回值是否符合条件,不符合等待30秒继续请求判断
java 写一个循环不断请求接口A判断返回值是否符合条件,不符合等待30秒继续请求判断
187 0
|
6月前
|
数据格式 Python
添加 自定义校验方法,让用户自定义校验规则
添加 自定义校验方法,让用户自定义校验规则
76 0
|
6月前
|
小程序
小程序封装组件简单案例,所有小程序适用(传入参数、外抛事件、传入样式)
小程序封装组件简单案例,所有小程序适用(传入参数、外抛事件、传入样式)
95 0
|
6月前
自定义封装一个方法让这个方法可以判断所有的数据类型并返回
自定义封装一个方法让这个方法可以判断所有的数据类型并返回
36 0
|
11月前
全局响应返回处理
全局响应返回处理
43 0
|
JSON 前端开发 Java
统一的数据返回格式和异常处理
统一的数据返回格式和异常处理
300 0
统一的数据返回格式和异常处理
|
PHP 开发者
函数规则|学习笔记
快速学习函数规则
|
Java Apache Maven
获取自定义配置的值|学习笔记
快速学习获取自定义配置的值
|
编译器 Scala 开发者
类型匹配的注意事项和细节 | 学习笔记
快速学习类型匹配的注意事项和细节