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

  • 相关阅读:
    解读tensorflow之rnn 的示例 ptb_word_lm.py
    tensorflow 的rnn的示例 ptb_word_lm.py 的完整代码
    python中decorator的用法及原理(一)
    android 6 (API 23) 及更高版本 面向 NDK 开发者的 Android 变更
    GCC选项_-Wl,-soname 及 DT_NEEDED 的解释
    一万小时天才理论
    好好说话!
    如何打造你的独立观点
    整理的艺术3
    读过的书记不住怎么办?
  • 原文地址:https://www.cnblogs.com/forelim/p/15395007.html
Copyright © 2011-2022 走看看