美文网首页
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