SpringMVC提供4个异常处理解析器的实现 DefaultHandlerExceptionResolver SimpleMappingExceptionResolver AnnotationMethodHandlerExceptionResolver ResponseStatusExceptionResolver
SpringMVC默认就装配了DefaultHandlerExceptionResolver SpringMVC会将所产生的异常转为响应状态码,然后我们在web.xml配置相应状态码的跳转页面即可,以下是相应exception所对应的错误代码:
exception类型 | 响应状态代码 |
ConversionNoSupportedException | 500(web服务器内部错误) |
HttpMediaTypeNotAcceptableException | 406 (无和请求accept匹配的MIME类型) |
HttpMediaTypeNotSupporteException | 415(不支持的MIME类型) |
HttpMessageNotReadableException | 400 (bad request) |
HttpMessageNotWritableException | 500(web服务器内部错误) |
HttpRequestMethodNotSupportedException | 405(不支持的请求方法) |
MissingServletParameterException | 400 |
NoSuchHandingMethodException | 404 (找不到匹配的资源) |
TypeMismatchException | 400 |
Web.xml根据相应的错误码进行错误页面配置:
<error-page> <error-code>404</error-code> <location>/404.html</location> </error-page>
还有比较常用的是AnnotationMethodHandlerExceptionResolver,这个可以通过在controller类当中定义一个方法处理在整个controller中任何一个处理方法出现exception的响应方式。@ExceptionHandler 参数为需要处理的exception类型。
@ExceptionHandler(RuntimeException.class) public @ResponseBody String exception(RuntimeException e,HttpServletRequest request){ e.printStackTrace(); return "server error!!!"; }这个是在UserController类中的一个方法,这个方法有两个参数一个是exception,一个是request。这里定义了如果UserController中任意一个handler处理方法出现RuntimeException异常后,输出错误,并返回一个server error!!! 字符串,如果是JSON可以返回一个JSON对象即可返回页面也是同理。