使用方法很简单
- package com.icode.common.web.handler;
-
- import com.icode.common.constant.exception.LoginException;
- import com.xd.core.common.command.ResponseCommand;
- import com.xd.core.common.error.ErrorMsg;
- import com.xd.core.common.utils.WebUtils;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ResponseBody;
-
- /**
- * <全局异常捕捉,,注意:作为一个@ControllerAdvice, GlobalExceptionHandler.java要单独存放文件夹
- * 或者已有bean的文件夹,否则和其他非bean文件放在一起就识别不出来>
- **/
- @ControllerAdvice
- public class GlobalExceptionHandler {
-
- /**
- * <当springboot项目出现运行时异常都会进入此方法>
- */
- @ExceptionHandler(value=Exception.class)
- @ResponseBody
- public ResponseCommand exceptionHandle(RuntimeException runtimeException){
- //打印异常信息
- runtimeException.printStackTrace();
- //返回错误信息给接口调用者
- return "{"errcode":"100","errMsg":"请求异常"}";
- }
-
- /**
- * <自定义异常捕捉>
- *
- */
- @ExceptionHandler(LoginException.class)
- @ResponseBody
- public ResponseCommand exceptionLogin(RuntimeException loginException){
- //打印异常信息
- loginException.printStackTrace();
- //返回错误信息给接口调用者
- return "{"errcode":"100","errMsg":"请求异常"}";
- }
- }
注意: 抛出异常时必须抛出 RuntimeException 才能捕捉到,
- @PostMapping(value = "article/validate/postArticle")
- public String saveArticle1(String token ,ArticleRequestCommand command) throws Exception{
-
- //RuntimeException 异常可正常捕捉
- throw new RuntimeException("可以捕捉的异常");
-
-
- //ControllerAdvice 无法捕捉Exception异常
- throw new Exception("无法捕捉的异常");
-
-
- return "succ";
-
-
- }
另外,自定义异常也必须继承 RuntimeException 异常,否则也是无法捕捉的
- package com.icode.common.constant.exception;
-
- import lombok.Data;
-
- /**
- * <自定义异常,必须继承 RuntimeException ,@ControllerAdvice才能捕捉到>
- *
- **/
- @Data
- public class LoginException extends RuntimeException {
-
-
- public LoginException() {
- }
-
- private Integer status;
-
- public LoginException(String message) {
- super(message);
- }
-
- public LoginException(Integer status,String message) {
- super(message);
- this.status = status;
- }
- }