SpringMVC异常处理

作用

如客户端调用web程序时,如果程序出现异常,特别是运行时异常;如果没有try-catch进行捕获,

异常将最终不会被ExceptionResolver进行处理,导致程序出现500错误。亦或者当客户端访问一个

不存在的商品详情时,此时需要呈现给用户一个显示页,用户告知“您查找的商品不存在”等信息。

没有异常处理机制下的程序

非运行时异常:

当程序需要显式的try-catch捕获进行处理时,不会造成500错误码。

但如果通过throws方式逐层抛出最终到Controller抛出,DispatcherServlet将异常分发给ExceptionResolver模块;如果未添加特殊处理,则程序抛出500错误码。

运行时异常:

由于不需要显式的try-catch,如果在程序未添加处理的情况下,通常会抛出500错误码。

访问详情不存在时显示页:

如果没有异常机制的统一处理,则添加return "redirect:/notFound.html";来处理

Spring MVC的异常处理机制下的处理方案

处理逻辑:

将系统中的异常、自定义异常(逻辑错误如访问详情时数据不存在),通过throws的方式,抛至springExceptionResolver来统一进行处理。

有三种方式:SimpleMappingExceptionResolver spring提供的简单异常处理器实现,实现HandlerExceptionResolver接口的自定义异常处理器,@ExceptionHandler注解实现异常处理,

实现HandlerExceptionResolver接口的自定义异常处理器

实现方法:

 建立CustomExceptionResolver实现HandlerExceptionResolver 接口。实现resolveException(),用于完成根据当前异常类型,在展示页展示对应的提示。并需在springmvc.xml中配置这个自定义的异常处理器。

可以获取出现异常的对象信息,比较常用

控制类添加异常

 

大配置文件

 

Jsp页面

 

spring提供的简单异常处理器SimpleMappingExceptionResolver通过自定义异常CustomException(属性message)
当系统出现CustomException异常时,封装当前的错误原因(如“您查找的商品不存在”),被ExceptionResolver
发至SimpleMappingExceptionResolver,通过配置文件找到对应的custom_error.jsp展示对应的错误信息。其他异常
则通过error.jsp展示给客户端,提示“未知错误”

@ExceptionHandler注解实现异常处理

使用@ExceptionHandler注解实现异常处理,需每一个controller都继承自该类,对于代码的侵入性大,一般不用。

AgeError异常类

 

NameError异常类

 

大配置

 

 

原文地址:https://www.cnblogs.com/qinzhenyu/p/11834832.html