21. 统一返回数据格式(JSON规则)
项目中将响应封装成json返回,一般我们会将所有的接口数据格式统一,使前端对数据的操作更一致,返回的数据格式包含状态码、返回消息、数据这部分
- 列表
{
"success": true,
"code": 200,
"message": "成功",
"data": {
"items": [
{
"id": "1",
"name": "刘德华",
"intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"
}
]
}
}
- 分页
{
"success": true,
"code": 20000,
"message": "成功",
"data": {
"total": 17,
"rows": [
{
"id": "1",
"name": "刘德华",
"intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"
}
]
}
}
- 没有返回数据
{
"success": true,
"code": 20000,
"message": "成功",
"data": {}
}
- 失败
{
"success": false,
"code": 20001,
"message": "失败",
"data": {}
}
总结
{
"success": 布尔, //响应是否成功
"code": 数字, //响应码
"message": 字符串, //返回消息
"data": HashMap //返回数据,放在键值对中
}
22. 统一异常处理
想让异常结果也显示为统一的返回结果对象,并且统一处理系统的异常信息,那么需要统一异常处理
1.统一异常处理配置类
/**
* @author jia
* @date 2022/8/17
* @description 统一异常处理类
*/
@ControllerAdvice
public class GlobalExceptionHandler {
//指定出现什么异常执行这个方法
@ExceptionHandler(Exception.class)
@ResponseBody //为了在也买你返回数据
public R error(Exception e){
e.printStackTrace();
return R.error().message("执行了全局处理异常.....");
}
}
2. 特定异常处理
//2.特定异常
@ExceptionHandler(ArithmeticException.class)
@ResponseBody //为了返回数据
public R error(ArithmeticException e){
e.printStackTrace();
return R.error().message("执行ArithmeticException异常处理.....");
}
3.自定义异常处理
-
创建自定义异常类继承RuntimeException
- 写异常属性
/** * @author jia * @date 2022/8/20 * @description 自定义异常类 */ @Data @AllArgsConstructor //有参构造 @NoArgsConstructor //无参构造 public class GuliException extends RuntimeException{ private Integer code;//状态码 private String msg; //异常信息 }
-
统一异常类中添加规则
//3.自定义异常处理 @ExceptionHandler(GuliException.class) @ResponseBody //为了返回数据 public R error(GuliException e){ e.printStackTrace(); return R.error().code(e.getCode()).message(e.getMessage()); }
3.执行自定义异常
try { int i = 10/0; }catch (Exception e){ //执行自定义异常 throw new GuliException(20001,"执行了自定义异常处理"); }