美文网首页
2023-12-26 使用全局异常来替代 返回 统一处理

2023-12-26 使用全局异常来替代 返回 统一处理

作者: 大也 | 来源:发表于2023-12-30 09:49 被阅读0次

GlobalExceptionHandler ## 2023-12-26 全局/自定义异常模版GlobalExceptionHandler

image.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();
    }

}

相关文章

网友评论

      本文标题:2023-12-26 使用全局异常来替代 返回 统一处理

      本文链接:https://www.haomeiwen.com/subject/xndkndtx.html