基于SpringBioot与Vue的拦截器与全局异常捕获

    科技2022-08-27  107

    1.前言

    首先,该文章的背景是基于前后端分离项目的,技术是SpringBoot与Vue环境下的,场景是,拦截请求,并且通过抛出异常的方式进行处理

    2.代码

    package com.chen.configuration; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //拦截器 @Component public class Interceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //依然可以通过这个方式获取到参数 String username = request.getParameter("username"); //可以看到这里我抛出了异常,在真实开发时候,大家根据业务需求进行判断,在选择是否抛出异常 throw new Exception("错误"); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { } } package com.chen.configuration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Autowired private Interceptor interceptor; //注册我们的拦截器 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(this.interceptor); } } package com.chen.configuration; import com.chen.dto.ResponData; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; //全局异常捕获 @ControllerAdvice public class MyExceptionHandler { //注意这里 切记返回的是数据 加上 @ResponseBody 否则无法使用 @ResponseBody @ExceptionHandler(value = Exception.class) public ResponData exceptionHandler(Exception e) { //注意 ResponData是我自己定义的返回类型,大家可以根据自己需要进行设计并返回 return new ResponData(e.getMessage(), false); } }

    效果: 通过拦截器跑出异常,全局异常捕获到,并且处理返回我们前端可以解析的类型进行展示。

    3.致谢

    这仅仅是最简便的写法,其中拦截器还可以设置需要拦截的路径与不需要拦截的路径,同时异常处理也可以根据自己需要设计自己的异常类进行抛出处理与返回,这些较为高阶的操作笔者就不在这里一一赘述了,最后感谢阅读!

    Processed: 0.011, SQL: 9