概述
一、常见场景
前后端分离,定义一种统一的返回格式应该有一个标准,减少沟通成本。
基于约定去理解,出现问题能快速的定位。
二、统一响应对象一半包含哪些字段,如下:
{
"code": 0,
"message": "成功",
detailMessage:"成功",
"data": true,
"traceId" ": "54sd5a545as4",
"spanId": "654565k56h54jk",
"env": "dev"
}
code:状态码,通常是6位,不同的开头代表不同的业务
detailMessage:开发人员看,打印的错误栈信息
data:返回给调用方的业务数据,通常是json
traceId:分布式链路跟踪-traceId,通常结合日志平台使用
spanId:分布式链路跨度-spanId,所有的spanId组合在一起就是整个链路的trace
env:当前的服务部署的环境,dev、prod
三、实现方案及实现步骤
1、定义一个通用的统一返回码接口∶IRespResultCode.java。接口里面规范子类对象要实现的方法.
例如: getcode.getMessage() ,getDetailHessage()
2、定义一个通用的统一返回码对象︰RespRe sultCode.java实现IRespResultCode接口,主要放通用的返回结果信息。
例如:请求成功、系统异常、网络异常、参数不合法等信息。
3、定义一个处理返回结来的工具类RespResult.java,定义一些通用的返回结来的方法,例如返回成功结果的5Ucess方法、返回失败结果的error方法。
4、封装业务异常类BusinessException.java。继承运行时异常,业务层出理一些逻辑约错误可以出BusinessException异常。
5、定义通过全局异常拦截器GlobalExceptionHandler拦截各类异常,对返回结果的code和message做二次加工。
5.1 Springboot的全局异常查是通过两个注解@RestContrdllerAdvice和@ExceptionHandler来实现的。
只有代码出错或者throw出来的异常才会被捕捉处理,如果被catch的异常,就不会被捕捉,除非catch之后再throw异常。@RestControllerAdvice:增强型控制器,对于控制器的全局配置放在同一个位置,全局异常的注解,放在类上。
RestControllerAdvice默认只会处理controller层抛出的异常。如果需要处理service层的异常,
需要定义一个自定义的NyException来继承RuntimeException类,然后@ExceptionHandler (MyException.class)即可。
5.2@ExceptionHandler:指明需要处理的异常类型以及子类。注解放在方法上面。
5.3一股对业务方法,比如controller层返回的code通常有两种做法:
1)返回http code 20e,对所有异常进行捕获,返回的message二次加工展示给调用方。
2〉返回不同的http code,通过ResponseStatus对象控制不同的异常展示不同的status code。不好的地方,status code比较有限,使用起来不是很方便,6lobalExceptionHandler处理异常的规则是:
,QExceptionHandLer(turtimeException.cl.ass)会先查看异常是否属于RuntimeException异常以及其子类,如果是的话,就用这个方法进行处理。,一个方法处理多个异常类的异常:@ExceptionHandler(value = {Exception.class,Throwable.class})
,有多个GExceptionHandler注解的方法时,会根据抛出异常类去寻找处理方法,如果没有,就往上找父类,直到找到为止。
最后
以上就是自觉时光为你收集整理的实现完整统一响应对象的全部内容,希望文章能够帮你解决实现完整统一响应对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复