您的位置:首页 > 编程语言 > Java开发

异常处理

2016-04-11 00:00 441 查看
摘要: SpringMVC异常处理

通过SpringMVC HandlerExceptionResolver来处理异常

public interface HandlerExceptionResolver {
ModelAndView resolveException(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);
}

处理的异常主要包含:Handler映射、数据绑定、目标方法执行时异常
常用的实现类:

ExceptionHandlerExceptionResolver
DefaultHandlerExceptionResolver
ResponseStatusExceptionResolver
SimpleMappingExceptionResolver

DispatcherServlet默认装配了HandlerExceptionResolver
使用 mvc:annotation-driven/配置:

ExceptionHandlerExceptionResolver
ResponseStatusExceptionResolver
DefaultHandlerExceptionResolver

ExceptionHandlerExceptionResolver具体使用:
主要处理Handler中用@ExceptionHandler注解定义的方法

1.局部的处理方式:目标处理器方法级的

(1)在目标处理器中,添加如下方法:

@ExceptionHandler({ArithmeticException.class})
public ModelAndView handleArithmeticException(Exception ex) {
ModelAndView modelAndView = new ModelAndView("error");
modelAndView.addObject("exception", ex);
return modelAndView;
}

说明:
该方法的入参中可以加入Exception类型的参数,该参数即为发生异常时对应的Exception
若想页面中获取该异常信息,则需要返回ModelAndView对象

(2)优先级
异常范围从小到大去匹配。

(3)此种处理方式只能处理当前处理器中处理方法抛出的异常。

2.全局的处理方式

@ControllerAdvice
public class HandleException {
@ExceptionHandler({RuntimeException.class})
public ModelAndView ExceptionHandler(Exception ex) {
ModelAndView mv = new ModelAndView("error");
mv.addObject("exception", ex);
return mv;
}

}

查找过程:

ExceptionHandlerExceptionResolver方法内查找@ExceptionHandler标记的方法是否符合当前异常,
若找不到,则会去全局的@ControllerAdvice标记的类中查找@ExceptionHandler标记的方法。

不常用的:

ResponseStatusExceptionResolver具体使用:
作用在异常类上:

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="没有找到")
public class MyException extends RuntimeException {
private static final long serialVersionUID = 1L;
}

抛出该异常时,会在页面展示对应的状态码和原因。

DefaultHandlerExceptionResolver:
对特殊异常进行处理,具体异常参见:
DefaultHandlerExceptionResolver#doResolveException

SimpleMappingExceptionResolver:
通过springmvc配置文件中配置来解决异常:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
<property name="exceptionAttribute">ex</property>
</bean>

其中 error 为对应的视图名称,返回的ModelMap中会添加exceptionAttribute对应值的属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SpringMVC异常处理