zoukankan      html  css  js  c++  java
  • SpringMVC的全局异常处理

    @ControllerAdvice的使用

    我们都知道做项目一般都会有全局异常统一处理的类,那么这个类在Spring中可以用@ControllerAdvice来实现。
    @ControllerAdvice ,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:

    全局异常处理
    全局数据绑定
    全局数据预处理
    灵活使用这三个功能,可以帮助我们简化很多工作,需要注意的是,这是 SpringMVC 提供的功能,在 Spring Boot 中可以直接使用。

    package com.boss.hr.train.fishkkmybatis.handle;
    
    import com.boss.hr.train.fishkkmybatis.entity.Result;
    import com.boss.hr.train.fishkkmybatis.enums.DictionaryEnum;
    import com.boss.hr.train.fishkkmybatis.exception.BaseException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.validation.BindException;
    import org.springframework.validation.ObjectError;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * ExceptionHandel
     * 全局异常处理类
     *
     * @author fishkk
     * @version 1.0
     * @since 2019/7/27
     */
    @ControllerAdvice
    public class ExceptionHandle {
        private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
    
        /**
          * 全局异常处理
          * 自定义异常  表单验证异常 和 未定义系统异常的处理
          * 转换成Result对象返回
          * @author fishkk
          * @since  2019/7/28
          * @param  e 被捕获的异常
          * @return  Result
          */
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public Result handle(Exception e){
            if (e instanceof BaseException) {
                // 系统内部异常
                BaseException exception = (BaseException) e;
                return new Result<Object>(exception.getResultEnum(), null);
            }
            if(e instanceof BindException){
                // @Valid表单验证不通过
                BindException bindException = (BindException)e;
                List<ObjectError> errors = bindException.getAllErrors();
                List<String> errorMessages = new ArrayList<>();
                for (ObjectError objectError : errors){
                    errorMessages.add(objectError.getDefaultMessage());
                }
    
                return Result.error("-300", e.getMessage());
            } else {
                logger.error("!!!系统异常!!!", e);
                return new Result<Object>(DictionaryEnum.UNKNOW_ERROR, null);
            }
        }
    }
    

    @ExceptionHandler 注解用来指明异常的处理类型,我们这里捕获全部异常。然后通过异常类型的判断进行相应的处理和封装,返回自定义的相应类和用自定义的异常类进行枚举构造,
    这个可以根据不同的实际情况来自行更改

  • 相关阅读:
    Git安装配置
    Openstack 错误日志查看方法
    keystone v3.0与2.0的区别
    Python远程调试Openstack
    openstack遇到的错误
    特别翔实的adaboost分类算法讲解 转的
    h5 html5 模拟时钟 页面
    js 面向对象 jquery 全局变量 封装
    HTML5 h5 微信 浮层 提示 点击右上角,从浏览器打开 pop.png
    jquery中ajax使用error调试错误的方法,实例分析了Ajax的使用方法与error函数调试错误的技巧
  • 原文地址:https://www.cnblogs.com/fishkk/p/11371966.html
Copyright © 2011-2022 走看看