可以通过@ControllerAdvice 和 @ExceptionHandler注解定义全局异常处理
使用方式:
* @ControllerAdvice:配置到java类
* 定义一个异常处理方法
* 返回值String (视图)
* 参数:Model
* 方法上通过@ExceptionHandler配置(处理的异常类型)
package com.xxx.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import javax.servlet.http.HttpServletRequest;
/**
* @author zhangspeng
* @version 1.0
* @date 2021/9/18 16:23
*/
@ControllerAdvice
public class MyHandlerExceptionResolver {
@ExceptionHandler(value = NumberFormatException.class)
public String umberFormatException(HttpServletRequest request){
request.setAttribute ("msg","NumberFormatException出错页面");
return "forward:/e1.jsp";
}
@ExceptionHandler(value = ClassCastException.class)
public String classCastException(HttpServletRequest request){
request.setAttribute ("msg","classCastException出错页面");
return "forward:/e1.jsp";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
1.重点:自定义一个类实现HandlerExceptionResolver接口,将异常处理器交给spring容器管理即可
package com.xxx.exception;
import com.sun.org.apache.xpath.internal.operations.Mod;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.annotation.ModelAndViewResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author zhangspeng
* @version 1.0
* @date 2021/9/18 16:42
*/
//@Component
public class MyHandlerExceptionResolverOne implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView ();
if (e instanceof ClassCastException) {
modelAndView.addObject ("msg","类型转换异常");
modelAndView.setViewName ("forward:/e1.jsp");
}
return modelAndView;
}
}