• 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

  • 相关阅读:
    haproxy 基于 cookie 的会话保持
    haproxy 透明代理
    haproxy tcp keepalive
    haproxy 支持 websocket
    python 中给文件加锁
    使用python生成二维码
    python中的uuid简介
    django建表报错
    pip安装第三方包PIL失败
    python获取mac地址的方法
  • 原文地址:https://www.cnblogs.com/forelim/p/15395007.html
Copyright © 2020-2023  润新知