问题遇到的现象和发生背景
实现HandlerInterceptor的类中的preHandle方法抛出一个异常,异常处理类中对应的处理方法没有执行
问题相关代码,请勿粘贴截图
@ControllerAdvice
public class CrowdExceptionResolver {
@ExceptionHandler(value = LoginFailedException.class)
public ModelAndView resolveLoginFailedException(
LoginFailedException exception,
HttpServletRequest request,
HttpServletResponse response
) throws IOException {
String viewName = "login";
return commonResolve(viewName, exception, request, response);
}
@ExceptionHandler(value = AccessForbiddenException.class)
public ModelAndView resolveAccessForbiddenException(
AccessForbiddenException exception,
HttpServletRequest request,
HttpServletResponse response) throws IOException {
String viewName = "login";
return commonResolve(viewName, exception, request, response);
}
@ExceptionHandler(value = LoginAcctAlreadyInUseForUpdateException.class)
public ModelAndView resolveLoginAcctAlreadyInUseForUpdateException(
LoginAcctAlreadyInUseForUpdateException exception,
HttpServletRequest request,
HttpServletResponse response) throws IOException {
String viewName = "edit";
return commonResolve(viewName, exception, request, response);
}
// @ExceptionHandler将一个具体的异常类型和一个方法关联起来
private ModelAndView commonResolve(
// 异常处理完成后要去的页面
String viewName,
// 实际捕获到的异常类型
Exception exception,
// 当前请求对象
HttpServletRequest request,
// 当前响应对象
HttpServletResponse response) throws IOException {
// 1.判断当前请求类型
boolean judgeResult = CrowdUtil.judgeRequestType(request);
// 2.如果是Ajax请求
if(judgeResult) {
// 3.创建ResultEntity对象
ResultEntity