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
@ExceptionHandler(value
= Exception
.class)
public ResponData
exceptionHandler(Exception e
) {
return new ResponData(e
.getMessage(), false);
}
}
效果: 通过拦截器跑出异常,全局异常捕获到,并且处理返回我们前端可以解析的类型进行展示。
3.致谢
这仅仅是最简便的写法,其中拦截器还可以设置需要拦截的路径与不需要拦截的路径,同时异常处理也可以根据自己需要设计自己的异常类进行抛出处理与返回,这些较为高阶的操作笔者就不在这里一一赘述了,最后感谢阅读!