SpringMVC 全局异常处理映射
SpringMVC 全局统一异常映射
统一管理项目中的异常,抛出异常,显示异常信息
-
普通请求:在页面上显示异常信息
-
Ajax 请求:返回 JSON 数据
在springmvc中,一个请求如果是由mvc:view-controller处理的,在这过程中如果抛出了异常,那么就得用基于xml的异常映射来捕获处理这个异常。如果请求是有@RequestMapping这个注解来处理的,在这过程中发生了异常,那么就得使用基于注解的异常映射来捕获并处理这个异常。
XML 配置
error
注解配置
判断一个请求是 Ajax 请求,还是普通请求:
查看请求头 HttpServletRequest 内容:
/**
* 判断当前请求是否为Ajax请求
* @param request
* @return true Ajax请求
* false 不是
*/
public static boolean judgeRequestType(HttpServletRequest request){
String headerAccept = request.getHeader("Accept");
String headerXRequestWith = request.getHeader("X-Requested-With");
return ((headerAccept != null && headerAccept.contains("application/json"))
|| (headerXRequestWith != null && headerXRequestWith.contains("XMLHttpRequest")));
}
/**
* 基于注解的异常处理类
*/
@ControllerAdvice // 表示当前类是一个基于注解的异常处理器类
public class CrowdExceptionResolver {
/**
*
* @param exception 捕捉到的异常类型
* @param request 当前请求对象
* @param response
* @return
* @throws IOException
*/
@ExceptionHandler(value = LoginFailedException.class) // 将一个具体的异常类型和一个方法关联起来
public ModelAndView resolverLoginFailedException(LoginFailedException exception,
HttpServletRequest request,
HttpServletResponse response) throws
IOException {
String viewName = "admin-login";
return commonResolver(viewName,exception,request,response);
}
@ExceptionHandler(value = AccessForbiddenException.class)
public ModelAndView resolverAccessForbiddenException(AccessForbiddenException exception,
HttpServletRequest request,
HttpServletResponse response) throws
IOException {
String viewName = "admin-login";
return commonResolver(viewName,exception,request,response);
}
@ExceptionHandler(value = NullPointerException.class)
public ModelAndView resolverNullPointerException(NullPointerException exception,
HttpServletRequest request,
HttpServletResponse response) throws
IOException {
String viewName = "error";
return commonResolver(viewName,exception,request,response);
}
@ExceptionHandler(value = RuntimeException.class)
public ModelAndView resolverRuntimeException(RuntimeException exception,
HttpServletRequest request,
HttpServletResponse response) throws
IOException {
String viewName = "error";
return commonResolver(viewName,exception,request,response);
}
@ExceptionHandler(value = ArithmeticException.class)
public ModelAndView resolverArithmeticException(ArithmeticException exception,
HttpServletRequest request,
HttpServletResponse response) throws
IOException {
String viewName = "error";
return commonResolver(viewName,exception,request,response);
}
/**
* @param viewName
* @param exception
* @param request
* @param response
* @return
* @throws IOException
*/
private ModelAndView commonResolver(String viewName,Exception exception,HttpServletRequest
request,
HttpServletResponse response) throws IOException {
// 1.判断请求类型
boolean b = CrowdUtil.judgeRequestType(request);
// 2. Ajax 请求
if (b){
ResultEntity