1.注解
@ExceptionHandler:用于指定异常处理方法。当与@RestControllerAdvice配合使用时,用于全局处理控制器里的异常。
2.配置类
@RestControllerAdvice @Slf4j public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public Result handleException(Exception e) { log.error("系统异常", e); return ResultGenerator.genResult(ResultCode.E_500.getCode(), e.getMessage(), null); } @ExceptionHandler(NewRuntimException.class) public Result handleException(NewRuntimException e) { log.error("请求异常被程序拦截", e); return e.getErrorCode() == 0 ? ResultGenerator.genResult(ResultCode.E_500.getCode(), e.getMessage(), null) : ResultGenerator.genResult(e.getErrorCode(), e.getMessage(), null); } }
3.使用
当项目在运行时抛出NewRuntimException或者我们手动抛出NewRuntimException后,GlobalExceptionHandler 会自动捕获到该异常,并按照配置类中声明的返回体响应给前端
if (true){ throw new NewRuntimException(500,"测试异常"); }
4.自定义异常类
新建一个配置类,并继承RunRuntimeException即可,可以添加有参构造方法,用来声明异常code
4.1配置类实例
public class NewRuntimException extends RuntimeException { private static final long serialVersionUID = 1L; private int errorCode; public NewRuntimException(String msg) { super(msg); } public NewRuntimException(int errorCode, String msg) { super(msg); //自定义错误码 this.setErrorCode(errorCode); } public int getErrorCode() { return errorCode; } public void setErrorCode(int errorCode) { this.errorCode = errorCode; } }
4.2使用
public boolean indexExist(String index) { if (true){ throw new NewRuntimException(ResultCode.E_400.getCode(),"请检查参数"); } }