zoukankan      html  css  js  c++  java
  • 8. SpringBoot异常处理&拦截器

    1.0 异常处理

    全局异常处理类

    import com.demo.vo.HttpResult;
    import org.springframework.validation.BindException;
    import org.springframework.validation.ObjectError;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 定义全局异常类
     * 全局异常控制类加入拦截
     */
    @RestControllerAdvice
    public class GlobalExceptionHandle {
        
        @ExceptionHandler(value = BindException.class)
        public HttpResult bindExceptionErrorHandler(BindException ex) throws Exception {
            List<String> errorList=new ArrayList<>();
            if(ex.hasErrors()){
                List<ObjectError> list=ex.getAllErrors();
                for(ObjectError objectError:list){
                    errorList.add(objectError.getDefaultMessage());
                }
    //            ex.getAllErrors().forEach( objectError -> errorList.add(objectError.getDefaultMessage()));
            }
            if(!errorList.isEmpty()){
                return HttpResult.error(errorList);
            }
            return HttpResult.error();
        }
    }
    

    2.0 拦截器

    2.1 拦截器类

    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MyInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("my interceptor prehandles");
            return true;
        }
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("my interceptor postHandler");
        }
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("my interceptor aferCompletion");
        }
    }
    

    2.2 开启拦截器

    import com.demo.interceptor.MyInterceptor;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/hello");
        }
    }
    

    拦截器中方法的执行顺序:preHandle-->Controller-->postHandle-->afterCompletion

  • 相关阅读:
    OpenWrt配置绿联的usb转Ethernet网口驱动
    SQL_wm_concat函数实验:实现字段合并
    BingMap频繁Add Pushpin和Delete Pushpin会导致内存泄露
    比較C++和Java 二
    【JAVASE】Java同一时候抛出多个异常
    uva 1463
    Android 撕衣服(刮刮乐游戏)
    轻松掌握一致性哈希算法
    Oracle之sql语句优化
    Eclipse导出Library
  • 原文地址:https://www.cnblogs.com/forelim/p/15395007.html
Copyright © 2011-2022 走看看