网站代理商,网站界面设计教程,如何制作代码,广东高职一流专业建设专题网站Spring MVC异常处理 Spring MVC异常处理机制HandlerExceptionResolver的实现类DefaultHandlerExceptionResolver实现类DefaultHandlerExceptionResolver 在Controller的请求处理方法中手动使用try…catch块捕捉异常#xff0c;当捕捉到指定的异常时#xff0c;系统返回对应的… Spring MVC异常处理 Spring MVC异常处理机制HandlerExceptionResolver的实现类DefaultHandlerExceptionResolver实现类DefaultHandlerExceptionResolver 在Controller的请求处理方法中手动使用try…catch块捕捉异常当捕捉到指定的异常时系统返回对应的逻辑视图名——但这种异常处理方式非常烦琐需要在请求处理方法中书写大量的catch块。其最大的缺点还在于异常处理与代码耦合一旦需要改变异常处理方式必须修改大量的代码这是一种相当糟糕的方式。 对于MVC框架希望其提供的异常处理流程 异常处理流程是当控制器的处理方法处理用户请求时如果出现了异常1则系统转入视图资源1并在该视图资源上输出异常提示如果出现异常2则系统转入视图资源2并在该视图资源上输出异常提示。 假如在控制器的处理方法中使用try…catch块来捕捉异常当捕捉到指定的异常时系统返回对应的逻辑视图名——这种处理方式完全是手动处理异常非常烦琐而且可维护性不好如果有一天需要改变异常处理流程则必须修改控制器的代码。 如果手动捕捉catch异常然后返回return一个字符串作为逻辑视图名其实质就是定义异常类与逻辑视图名之间的对应关系。既然如此那么完全可以将这种对应关系放在配置文件中进行管理。实际上早期Spring MVC确实是这么干的——那时候Spring MVC主要还是受Struts 2的影响。
Spring MVC异常处理机制
主要由HandlerExceptionResolver接口负责处理该接口中只定义了如下抽象方法 看这个方法的参数和返回值是不是一切全明白了 该方法包含4个参数其中request、response参数不用管毕竟处理Web请求总离不开这些Servlet APIhandler代表抛出异常的处理方法Exception ex是关键参数其返回值是ModelAndView——该异常解析器做的事情是什么不就是完成Exception类与ModelAndView的对应关系吗 Spring MVC为HandlerExceptionResolver接口提供的实现类如图
HandlerExceptionResolver的实现类
有如下几个。 ➢ SimpleMappingExceptionResolver这是Spring MVC刚出现时提供的实现类完全是模仿Struts 2的一个实现类现在一般不推荐使用它。 ➢ DefaultHandlerExceptionResolver它是Spring MVC默认的异常解析器。
➢ ResponseStatusExceptionResolver它负责为ResponseStatus注解修饰的异常类提供底层支持。 ➢ ExceptionHandlerExceptionResolver它负责为ExceptionHandler注解修饰的异常处理方法提供底层支持。 ➢ HandlerExceptionResolverComposite它是一系列异常解析器的前端代理。
随着Spring 1.0面世的Spring MVC难免受到Struts 2的影响因此HandlerExceptionResolver只有一个实现类SimpleMappingExceptionResolver它的设计哲学完全模仿Struts 2在配置文件中定义异常类与逻辑视图名之间的对应关系。
如果Spring MVC一直停留在“模仿Struts 2”的层次那么就不会有今天Spring MVC的辉煌了。
伴随着Spring 3的“王者归来”Spring MVC带来了“颠覆式”的异常处理机制它彻底脱离了Struts 2的窠臼改为基于AOP的异常处理机制。这种异常处理机制不仅能定义异常类与逻辑视图名之间的对应关系还可对异常做一些额外的修复处理并彻底将异常处理代码与业务处理代码分离。这种异常处理机制的底层由ResponseStatusExceptionResolver、ExceptionHandlerExceptionResolver等实现类提供支持而开发者使用ResponseStatus、ExceptionHandler、ControllerAdvice注解以声明式方式进行异常处理即可。
至于
DefaultHandlerExceptionResolver实现类
它是Spring MVC内置的异常解析类定义了常见异常类与HTTP状态码之间的对应关系。比如MissingPathVariableException异常类对应500SC_INTERNAL_SERVER_ERROR、TypeMismatchException异常类对应400SC_BAD_REQUEST……关于该类支持的异常类与HTTP状态码之间的对应关系读者可自行参看该类的API文档。
DefaultHandlerExceptionResolver类只能支持这些异常类因为它的源代码就是在doResolveException()方法中以“硬编码”方式写死了这些异常类与HTTP状态码之间的对应关系的——读者可自行查看这个实现类的源代码。
DefaultHandlerExceptionResolver
是Spring MVC框架本身使用的异常解析器开发者一般不会直接用到它。 总结Spring MVC的异常处理机制无非两类。 ➢ 使用SimpleMappingExceptionResolver基于配置文件的异常处理机制。这种机制完全类似于Struts 2的异常处理机制。
➢ 使用ResponseStatus、ExceptionHandler、ControllerAdvice基于AOP的异常处理机制。这是目前主流的异常处理机制。 本节将会简单介绍使用SimpleMappingExceptionResolver的传统的异常处理机制重点还是以使用ResponseStatus、ExceptionHandler、ControllerAdvice的异常处理机制为主。