我们想让异常结果也显示为统一的返回结果对象,并且统一处理系统的异常信息,那么需要统一异常处理
1.创建全局异常处理控制器
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public R error(Exception e){
e.printStackTrace();
return R.error();
}
}
2.实现特殊异常处理
第一步我们已经设置了全局统一异常处理,但如果需要对某一类异常单独做处理就需要单独设置
如下:现有异常 ArithmeticException (分母不能为0异常),若我们想单独抓取该类异常就需要单独去设置。
代码如下:
4、实现特殊异常处理
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public R error(ArithmeticException e){
e.printStackTrace();
return R.error().message("特殊异常处理");
}
3.自定义异常处理
3.1 定义异常
如下自定义一个异常继承运行时异常。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GuliException extends RuntimeException {
@ApiModelProperty(value = "状态码")
private Integer code;
private String msg;
}
3.2 异常控制器中添加方法
```java
import com.atguigu.commonutils.R;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public R error(Exception e) {
e.printStackTrace();
return R.error();
}
//实现特殊异常处理
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public R error(ArithmeticException e) {
e.printStackTrace();
return R.error().message("特殊异常处理");
}
// 自定义异常处理
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public R error(GuliException e) {
e.printStackTrace();
return R.error().message(e.getMessage()).code(e.getCode());
}
}
3.3 抓取自定义异常
**自定义异常的抓取需要通过try{...}catch{...}包裹代码块来实现**
测试结果如下: