GlobalExceptionHandler ## 2023-12-26 全局/自定义异常模版GlobalExceptionHandler
![](https://img.haomeiwen.com/i2673147/ac9240a3f330327c.png)
/**
* 1.全局异常发生,会走此类写的handler!
* @RestControllerAdvice = @ControllerAdvice + @ResponseBody
* @ControllerAdvice 代表当前类的异常处理controller! 是可以返回逻辑视图 转发和重定向
* 找视图页面的话 返回对应的字符串 return "home";
* @ResponseBody 直接返回json字符串
*
* 2.扫描controller对应的包,将handler加入到ioc
* @ComponentScan(basePackages = {"com.atguigu.controller",
* "com.atguigu.exceptionhandler"})
*
* 3.理解 发生异常 -》 ControllerAdvice 注解的类型 -》 @ExceptionHandler(指定的异常) -> handler
* 写方法 指定的异常 可以精准查找,或者查找父异常
* @ExceptionHandler(NullPointerException.class)
*/
@RestControllerAdvice
//@ControllerAdvice
//@ResponseBody
public class GlobalExceptionHandler {
/**
* 异常处理handler
* @ExceptionHandler(HttpMessageNotReadableException.class)
* 该注解标记异常处理Handler,并且指定发生异常调用该方法!
*
*
* @param e 获取异常对象!
* @return 返回handler处理结果!
*/
@ExceptionHandler(HttpMessageNotReadableException.class)
public Object handlerJsonDateException(HttpMessageNotReadableException e){
return null;
}
/**
* 当发生空指针异常会触发此方法!
* @param e
* @return
*/
@ExceptionHandler(NullPointerException.class)
public Object handlerNullException(NullPointerException e){
String message = e.getMessage();
System.out.println("message ----" + message);
return message;
}
/**
* 所有异常都会触发此方法!但是如果有具体的异常处理Handler!
* 具体异常处理Handler优先级更高!
* 例如: 发生NullPointerException异常!
* 会触发handlerNullException方法,不会触发handlerException方法!
* @param e
* @return
*/
@ExceptionHandler(Exception.class)
public Object handlerException(Exception e){
String message = e.getMessage();
System.out.println("message ----" + message);
return message;
}
/**
自定义 异常错误类
*/
@ExceptionHandler(GuiguException.class)
public Result error(GuiguException guiguException){
return Result.build(null, guiguException.getResultCodeEnum());
}
}
@Data
public class GuiguException extends RuntimeException{
private Integer code;
private String message;
private ResultCodeEnum resultCodeEnum;
public GuiguException(ResultCodeEnum resultCodeEnum) {
this.resultCodeEnum = resultCodeEnum;
this.code = resultCodeEnum.getCode();
this.message = resultCodeEnum.getMessage();
}
}
网友评论