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

  • 相关阅读:
    EF的连表查询Lambda表达式和linq语句
    C#.NET里面抽象类,接口,虚方法
    ASP.Net WebAPI的返回值
    IHttpActionResult不识别解决办法
    web api 开发之 filter
    SQL语句大全教程
    ASP.NET Web API 跨域访问(CORS)要注意的地方
    铁乐学python_shelve模块详解
    铁乐学python_day25_序列化模块
    铁乐学python_day24_面向对象进阶1_内置方法
  • 原文地址:https://www.cnblogs.com/forelim/p/15395007.html
Copyright © 2011-2022 走看看