一、什么是统一异常处理
1、制造异常
除0
int a = 10/0;
swagger测试:http://localhost:8001/swagger-ui.html
2、什么是统一异常处理
我们想让异常结果也显示为统一的返回结果对象,并且统一处理系统的异常信息,那么需要统一异常处理
二、统一异常处理
1、创建统一异常处理器
在service-base中创建统一异常处理类GlobalExceptionHandler.java
:
package com.atguigu.servicebase.handler;
import com.atguigu.commonutils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 统一异常处理类
*/
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public R error(Exception e){
e.printStackTrace();
return R.error();
}
}
2、测试
返回统一错误结果
swagger测试:http://localhost:8001/swagger-ui.html
三、处理特定异常
1、添加异常处理方法
GlobalExceptionHandler.java中添加
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public R error(ArithmeticException e){
e.printStackTrace();
return R.error().message("执行了自定义异常");
}
2、测试
swagger测试:http://localhost:8001/swagger-ui.html
四、自定义异常
1、创建自定义异常类GuliException.Java
package com.atguigu.servicebase.handler;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GuliException extends RuntimeException {
@ApiModelProperty(value = "状态码")
private Integer code;
private String msg;
@Override
public String toString() {
return "GuliException{" +
"message=" + this.getMessage() +
", code=" + code +
'}';
}
}
2、业务中需要的位置抛出GuliException
在EduTeacherController中的方法添加抛出异常的方法
//查询所有讲师方法
@ApiOperation(value = "所有讲师列表")
@GetMapping
public R list(){
try {
int a = 10/0;
}catch(Exception e) {
throw new GuliException(20001,"出现自定义异常");
}
List<EduTeacher> list = eduTeacherService.list(null);
return R.ok().data("items", list);
}
3、添加异常处理方法
GlobalExceptionHandler.java中添加
@ExceptionHandler(GuliException.class)
@ResponseBody
public R error(GuliException e){
e.printStackTrace();
return R.error().message(e.getMsg()).code(e.getCode());
}
4、测试
swagger测试:http://localhost:8001/swagger-ui.html