叠甲
自己查询答案的时候总结的说法,仅供参考,轻喷...
面试时...
- 面试官:异常捕捉你怎么实现的?
- 我:...呃...不好意思,我接手的时候是二期,这个时候异常捕获已经完善了...
- 面试官:你没看过吗?
- 我:...对
解答方法
- 首先我会定义一个自定义的异常类,在这个类上面添加@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);
}
}