异常处理
创建 SpringMVC 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置注解扫描-->
<context:component-scan base-package="com.lanh.web.controller"/>
<!--配置注解驱动-->
<mvc:annotation-driven/>
<!--配置视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewR esolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
配置前端控制器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet< /servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
使用@ExceptionHandler 注解
该注解可以在需要捕获该异常的Controller中进行定义,从而对相应异常进行局部捕获
@ExceptionHandler({java.lang.NullPointerException.class,java.lang.ArithmeticException.class})
public String NullPointExceptionHandle(Exception e, Model model){
model.addAttribute("msg",e);
return "error";
}
@ExceptionHandler({java.lang.Exception.class})
public String ExceptionHandle(Exception e,Model model){
model.addAttribute("msg",e);
return "error2";
}
使用@ControllerAdvice和@ExceptionHandler处理异常
@ControllerAdvice注解用于定义全局异常处理类
使用了该注解的类,将处理所有 Controller 层抛出的对应Exception 及其子类的异常
如果 @ExceptionHandler 注解中未声明要处理的异常类型,则默认为参数列表中的异常类型
@ControllerAdvice
public class GlobalExceptionHandle {
@ExceptionHandler({java.lang.NullPointerException.class,java.lang.ArithmeticException.class})
public String NullPointExceptionHandle(Exception e, Model model){
model.addAttribute("msg",e);
return "error";
}
@ExceptionHandler({java.lang.Exception.class})
public String ExceptionHandle(Exception e,Model model){
model.addAttribute("msg",e);
return "error2";
}
}
使用 SimpleMappingExceptionResolver 处理异常
利用自带的SimpleMappingExceptionResolver进行全局异常处理
@Configuration
public class GlobalExceptionHandle {
@Bean
public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver(){
SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
properties.put("java.lang.NullPointerException","error");
properties.put("java.lang.ArithmeticException","error2");
resolver.setExceptionMappings(properties);
return resolver;
}
}
自定义HandlerExceptionResolver处理器处理异常
自定义HandlerExceptionResolver处理器进行全局异常处理
@Configuration
public class GlobalExceptionHandle implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
if(e instanceof NullPointerException){
modelAndView.setViewName("error");
}
if(e instanceof ArithmeticException){
modelAndView.setViewName("error2");
}
modelAndView.addObject("msg",e);
return modelAndView;
}
}