Springboot异常处理器
- 现在我们在Controller制造一个异常,然后用异常处理器捕获
这里1/0会报错,我们用postman测试一下。
@GetMapping
public Result<List<Book>> getAll(){
int i=1/0;
return bookService.getAll();
}
@RestControllerAdvice
public class ProjectExceptionAdvice {
//拦截所有的异常信息
@ExceptionHandler(Exception.class)
public void doException(Exception e){
e.printStackTrace();
System.out.println("嘿嘿,异常你往哪里跑!");
}
}
postman什么都没有,因为被异常处理器捕获了。
看看控制台有没有输出,可以看到表现层的异常已经被捕获到了。
然后呢,也可以改进一下。
枚举状态码
package com.hxut.domain;
import org.omg.CORBA.INTERNAL;
/**
* description: Response
* date: 2022/5/23 21:09
* author: MR.孙
*/
public class Response {
public enum Code{
//1001-1099成功
SUCCESS(1001,"成功"),
SAVE_SUCCESS(1002,"保存成功"),
DELETE_SUCCESS(1003,"删除成功"),
UPDATE_SUCCESS(1004,"修改成功"),
SELECT_SUCCESS(1005,"查询成功"),
//1101-1199失败
FAILED(1101,"失败"),
SAVE_FAILED(1102,"保存失败"),
DELETE_FAILED(1103,"删除失败"),
UPDATE_FAILED(1104,"修改失败"),
SELECT_FAILED(1105,"查询失败"),
//1201-1299参数错误或为空
PARAM_IS_NULL(1201,"参数为空"),
PARAM_IS_ERROR(1202,"参数错误"),
//400-600异常状态码
BAD_REQUEST(400,"请求数据格式不正确!"),
UNAUTHORIZED(401,"登录凭证过期"),
FORBIDDEN(403,"没有权限"),
NOT_FOUND(404,"没有找到资源"),
INTERNAL_SERVER_ERROR(500,"服务器内部错误"),
SERVICE_UNAVAILABLE(503,"服务器繁忙"),
//未知异常
UNKNOWN(10000,"未知异常")
;
private Integer code;
private String msg;
Code(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer code() {
return code;
}
public String msg() {
return msg;
}
}
}
改进异常处理器
//拦截所有的异常信息
@ExceptionHandler(Exception.class)
public Result doException(Exception e){
e.printStackTrace();
System.out.println("嘿嘿,异常你往哪里跑!");
return Result.ok(Response.Code.UNKNOWN.code(),Response.Code.UNKNOWN.msg(),null);
}