Java面试题目记录——Java中如何实现全局异常捕捉

60 阅读1分钟

叠甲

自己查询答案的时候总结的说法,仅供参考,轻喷...

面试时...

  • 面试官:异常捕捉你怎么实现的?
  • 我:...呃...不好意思,我接手的时候是二期,这个时候异常捕获已经完善了...
  • 面试官:你没看过吗?
  • 我:...对

解答方法

  • 首先我会定义一个自定义的异常类,在这个类上面添加@ControllerAdvice的注解
  • 接着我会写一个注解是@ResponseBody的方法,把返回内容的操作写上去
  • 最后我会在这个方法上添加@ExceptionHandler的注解,并赋予其捕捉Exception这样的最高权限

知识点解释

异常处理写法

@ControllerAdvice
public class CustomerExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public String exceptionHandler(Exception e){
        // 自定义返回内容
        // -- 结构
        // -- ---- code 状态码
        // -- ---- data 数据
        // -- ---- msg 信息
        return Result.Error(e.getMessage());
    }
}

@ControllerAdvice

  • @ControllerAdvice主要用来增强Controller处理
  • 其实就是ControllerAdvice在Controller的外层,接口进来的时候会先进来ControllerAdvice中,在进入到Controller的服务里面
  • 反之,在返回的时候,先返回到Controller,再到ControllerAdvice

@ExceptionHandler

  • 在方法中添加了@ExceptionHandler之后,SpringBoot会将其注册到ControllerAdvice里面,接着在下层Controller发生异常时,上层的ControllerAdvice会直接捕获起来,然后调用对应的方法
  • 其中value = Exception.class指的是能够捕捉所有异常,其它也能够写自定义异常CustomerException
// 自定义异常
public class CustomerException extends RuntimeException {
    public CustomerException(String msg) {
        super(msg);
    }
}