Java – SpringMVC – 异常处理器
简介
SpringMVC异常指的是当我们的控制器方法在执行时,若出现运行时异常时的处理方案。
SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver
基于XML配置异常处理器
HandlerExceptionResolver
接口的实现类有:DefaultHandlerExceptionResolver
和SimpleMappingExceptionResolver
当我们的控制器方法中出现异常时,HandlerExceptionResolver 接口需要我们提供一个 ModelAndView 对象,以跳转至相应的异常页面。
DefaultHandlerExceptionResolver
DefaultHandlerExceptionResolver 是SpringMVC针对一些常见的异常进行处理,我们可以使用DefaultHandlerExceptionResolver
来自动为一些常见的异常交给它处理,DefaultHandlerExceptionResolver
能处理的异常包括以下
HttpRequestMethodNotSupportedException
HttpMediaTypeNotSupportedException
HttpMediaTypeNotAcceptableException
MissingPathVariableException
MissingServletRequestParameterException
ServletRequestBindingException
ConversionNotSupportedException
TypeMismatchException
HttpMessageNotReadableException
HttpMessageNotWritableException
MethodArgumentNotValidException
MissingServletRequestPartException
BindException
NoHandlerFoundException
AsyncRequestTimeoutException
SimpleMappingExceptionResolver
SimpleMappingExceptionResolver 是提供给我们自定义异常时的解析器,我们可以在Bean XML 中设置自定义异常。
<!-- 异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!--
properties的键表示处理器方法执行过程中出现的异常
properties的值表示若出现指定异常时,设置一个新的视图名称,跳转到指定页面
-->
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
<!--
exceptionAttribute属性设置一个属性名,将出现的异常信息在请求域中进行共享
-->
<property name="exceptionAttribute" value="ex"></property>
</bean>
我们可以设置自定义异常,并设定发生异常时,会跳转的页面。
exceptionAttribute
是指,异常时会报出的异常信息,有值但是没有定义key,而exceptionAttribute的value则是定义这个异常信息的key名称,可以在页面中使用 ${ex} 来访问异常信息。
基于注解的异常处理器
异常处理器实际上也是一个控制器
通过注解名【@ControllerAdvice】
在控制器类上加上【@ControllerAdvice】
后,则表示该控制器为异常处理控制器
在控制器方法上加上【@ExceptionHandler】
后,则表示该控制方法为特定异常时处理的方法
【@ExceptionHandler】
需要提供一个异常类数组(当只有一个时,可以不用数组格式)
/**
* @ControllerAdvice 表示使该控制器类为异常处理控制器
*/
@ControllerAdvice
public class ExceptionController {
/**
* @ExceptionHandler(ArithmeticException.class) 表示,对控制器发生 ArithmeticException 时,会调用此异常处理方法
* 方法可以接收 Throwable 异常信息,和 Model 对象
* 也可以直接返回 ModelAndView 对象
* @return
*/
@ExceptionHandler(ArithmeticException.class)
public String exception(Throwable ex, Model model){
/**
* 把Throwable异常信息输到 error.html 页面中
*/
model.addAttribute("ex",ex);
return "error";
}
}
共有 0 条评论