当前位置: 代码迷 >> 综合 >> 捕获全局异常——@ControllerAdvice
  详细解决方案

捕获全局异常——@ControllerAdvice

热度:90   发布时间:2024-01-24 20:37:57.0

捕获全局异常——@ControllerAdvice

    • 编写捕获异常代码(因为是编写API,所以这里返回的都是数据)
    • 编写统一获取的常见异常以及统一返回

因为本文讲述的是捕获全局异常,通过阅读官方文档,@ControllerAdvice注解的默认行为(即,如果不使用任何选择器使用),带@ControllerAdvice注释的类将帮助所有已知的Controller。因此,本文不带上任何参数设置,有兴趣的可以查看官方文档

编写捕获异常代码(因为是编写API,所以这里返回的都是数据)

import com.jian.Result.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;/***  统一处理异常**  @author YeZhiJian**/
@org.springframework.web.bind.annotation.ControllerAdvice
@ResponseBody
public class ControllerAdvice {private final static Logger logger = LoggerFactory.getLogger(ControllerAdvice.class);/***  统一捕获异常* @param e* @return Result只是自定义的统一返回数据*/@ExceptionHandler(Exception.class)public Result<String> ExceptionHandler(Exception e){logger.error("------------------------------------------------异常捕获----------------------------------------");logger.error("异常类型 : " + e.getClass());logger.error("异常信息 : " + e.getLocalizedMessage());e.printStackTrace();logger.error("------------------------------------------------------------------------------------------------");return Result.failure(ExceptionTypeMap.getExceptionTypeReturn(e.getClass()));}}

编写统一获取的常见异常以及统一返回

import java.util.HashMap;
import java.util.Map;/***  异常返回**  @author YeZhiJian**/
public class ExceptionTypeMap {/***  定义一个Map,用于判断异常的返回值*/private static Map<Class<? extends Exception>, String> throwableMap = new HashMap<>();/***  静态块中初始化自定义异常类型返回*/static {throwableMap.put(ArrayIndexOutOfBoundsException.class, "数组下标越界,请稍后再试");throwableMap.put(NullPointerException.class, "空指针异常,请稍后再试");throwableMap.put(ClassNotFoundException.class, "指定的类不存在异常,请稍后再试");throwableMap.put(ArithmeticException .class, "数学运算异常,请稍后再试");throwableMap.put(IllegalAccessException.class, "接口调取没有访问权限,请稍后再试");throwableMap.put(ClassCastException.class, "类型转换异常,请稍后再试");throwableMap.put(IllegalArgumentException.class, "非法参数异常,请稍后再试");throwableMap.put(NumberFormatException.class, "数字格式化异常,请稍后再试");throwableMap.put(java.text.ParseException.class, "解析异常,请稍后再试");throwableMap.put(ArrayStoreException.class, "数组存储异常,请稍后再试");}/***  获取返回值* @return*/public static String getExceptionTypeReturn (Class<? extends Exception> exceptionClass){if (throwableMap.containsKey(exceptionClass)){return throwableMap.get(exceptionClass);}// 通用返回return "遇到预期之外的错误,请稍后再试";}}