SpringMVC异常处理
目标
- 使用异常映射机制将整个项目的异常和错误提示进行统一管理。
思路
注意:
- springmvc 提供了基于 xml和注解两种异常映射机制。
是在xml文件中配置的 ,@RequestMapping注解。
配置方式
基于 xml的
springmvc 全局配置文件
system-error
页面
<%--从域中取出 exceptiono对象,在进一步访问 message属性就能够显示错误信息。--%>
${pageContext.exception.message}
基于注解的
准备
- 判断当前请求时 普通请求还是 ajax请求 工具类
import javax.servlet.http.HttpServletRequest;
/**
* @author zhaokuii11@163.com
* @create 2021-12-01 20:59
* @Description 判断请求类型、ajax还是 普通的
*/
public class CrowdUtil {
/**
* 判断当前请求是 ajax还是 普通请求
* 判断依据:
* Accept : application/json; charset=utf-8
* X-requested-with: XMLHttpRequest
* 只要有一个就可以
*
* @param request 请求对象
* @return Boolean true ajax请求、false 普通请求
*/
public static boolean judgeRequestType(HttpServletRequest request) {
//1. 获取请求消息头
String accept = request.getHeader("Accept");
String xRequestedwith = request.getHeader("X-requested-with");
//2. 判断
if (accept != null && accept.contains("application/json") ||
xRequestedwith != null && xRequestedwith.contains("XMLHttpRequest")) {
return true;
}
return false;
}
}
编写
import com.aiguigu.crowd.util.CrowdUtil;
import com.aiguigu.crowd.util.ResultEntity;
import com.google.gson.Gson;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author zhaokuii11@163.com
* @create 2021-12-01 21:14
* @Description
*/
//@ControllerAdvice 表示当前类是一个基于注解的异常处理类
@ControllerAdvice
public class CrowdExceptionResolver {
// @ExceptionHandler 将一个具体的异常类型和一个方法关联起来【里面是一个数组】
@ExceptionHandler(value = NullPointerException.class)
public ModelAndView resolveNullPointException(
//实际捕获的德类型
NullPointerException exception,
//当前请求对象
HttpServletRequest request,
//当前响应对象
HttpServletResponse response) throws IOException {
//1. 判断当前请去
boolean requestType = CrowdUtil.judgeRequestType(request);
//2. 如果 Ajax请求
if (requestType) {
//3. 创建 ResultEntity 对象
ResultEntity