SpringBoot学习笔记(六):全局异常处理
程序员文章站
2022-05-03 10:23:41
...
SpringBoot可以使用@ControllerAdvice注解进行全局异常的处理,这样可以方便统一对异常的处理返回
1.处理常见异常
首先我们需要确定一个异常处理统一返回的格式
@Data
public class BaseResult {
/**
* 返回code,成功为0,失败为-1
*/
private String code;
/**
* 返回数据
*/
private Object data;
/**
* 返回信息
*/
private String msg;
public BaseResult(){
}
public BaseResult(String code, Object data, String msg) {
this.code = code;
this.data = data;
this.msg = msg;
}
public BaseResult success(Object data, String msg) {
return new BaseResult("0", data, msg);
}
public BaseResult failed(String msg) {
return new BaseResult("-1", null, msg);
}
}
接着定义一个全局异常处理类,这里以空指针异常为目标进行处理返回
@ControllerAdvice
@ResponseBody
public class BaseExceptionHandler {
@ExceptionHandler(NullPointerException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public BaseResult handleNullException(NullPointerException e){
return new BaseResult().failed("空指针异常");
}
}
测试请求
@RestController
public class TestController {
@GetMapping("/test")
public String test() {
String s = null;
s.toString();
return "test";
}
}
2.处理自定义异常
除了一些常见异常的处理,我们还可以自定义一些业务异常
public class BusinessException extends RuntimeException{
/**
* 自定义项目内异常
*/
public BusinessException(String msg){
super(msg);
}
}
在全局异常处理类里添加对自定义异常的处理
@ExceptionHandler(BusinessException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public BaseResult handleBusinessException(BusinessException e){
return new BaseResult().failed(e.getMessage());
}
测试请求
@GetMapping("/test2")
public String test2() {
try {
int i = 1 / 0;
} catch (Exception e) {
throw new BusinessException("测试自定义异常");
}
return "test2";
}
/ 0;
} catch (Exception e) {
throw new BusinessException(“测试自定义异常”);
}
return “test2”;
}
![image-20200721215445238](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZS10d3kyMDE4Lm9zcy1jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20vbm90ZS9pbWFnZS0yMDIwMDcyMTIxNTQ0NTIzOC5wbmc?x-oss-process=image/format,png)
上一篇: Python 中的 (&,|)及(and,or)之间的区别与联系
下一篇: 常见表单正则 记录(转)