SpringMVC之异常处理

喜夏-厌秋 提交于 2019-12-05 03:02:37

1 概述

  • SpringMVC通过HandlerExceptionResolver处理程序的异常,包括Handler映射、数据绑定以及目标方法执行时发生的异常。
  • SpringMVC提供的HandlerExceptionResolver的实现类如下:

 

 

2 ExceptionHandlerExceptionResolver

  • 主要处理Handler中用@ExceptionHandler注解定义的方法。
  • @ExceptionHandler注解定义的方法优先级问题:如果发生的异常时NullPointerException,但是声明的异常由RuntimeException和Exception,此时会根据异常的最近继承关系找到继承深度最浅的哪个@ExceptionHandler注解方法,即标记了RuntimeException的方法。
  • ExceptionHandlerExceptionResolver内部如果找不到@ExceptionHandler注解的话,就会找@ControllerAdvice中的@ExceptionHandler注解方法。

 

3 ResponseStatusExceptionResolver

  • 在异常及异常父类中找到@ResponseStatus注解,然后使用这个注解的属性进行处理。
  • 定义一个@ResponseStatus注解修饰的异常类:
package com.sunxiaping.springmvc.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(HttpStatus.UNAUTHORIZED)
public class UnauthorizedException extends RuntimeException {
}
  • 如果在处理器方案分中抛出了上述异常:假如ExceptionHandlerExceptionResolver不解析该异常,由于触发的异常UnauthorizedException带有@ResponseStatus注解。因此会被ResponseStatusExceptionResolver解析到,最后响应HttpStatus.UNAUTHORIZED代码到客户端。

 

4 DefaultHandlerExceptionResolver

  • 对一些特殊的异常处理,比如NoSuchRequestHandingMethodException、HttpRequestMethodNotSupportedException、HttpMediaTypeNotSupportedException等。

 

5 SimpleMappingExceptionHandler

  • 如果希望对所有的异常进行处理,可以使用SimpleMappingExceptionResolver,它将异常类名映射为视图名,即发生异常时使用对应的视图报告异常。
<bean id="simpleMappingExceptionResolver"
      class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <prop key="java.lang.ArithmeticException">error</prop>
        </props>
    </property>
</bean>

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!