Springmvc处理异常

文章目录

关于异常

  • 异常的体系结构:
1

2

3

4

5

6

7

8

9

10

11

12

13
Throwable

Error

OutOfMemoryError(OOM)

Exception

RuntimeException

NullPointerException:某个为null的对象调用了属性或方法

ClassCastException:强制转换为不匹配的数据类型

ClassNotFoundException:尝试加载的类不存在

IndexOutOfBoundsException:使用List集合时使用了越界的索引

ArrayIndexOutOfBoundsException:使用Array时使用了越界的索引

SQLException:数据库相关异常

IOException:输入输出(读写)异常

FileNotFoundException:文件找不到

在Spring MVC中处理异常

  • 在Spring MVC中,提供了一种统一处理某种异常的机制,例如通过配置,可以对整个项目中的NullPointerException进行处理,那么,无论是项目的哪个环节出现该异常,都会自动按照配置的方式进行处理,而不用每个方法中逐一编写相关代码。

准备演示案例

  • 创建项目DAY07-SpringMVC-Exception,设计请求路径:

    http://SERVER:PORT/PROJECT/ex1.do

    http://SERVER:PORT/PROJECT/ex2.do

  • 以上3个请求将分别由ex1.jspex2.jsp页面显示。

使用SimpleMappingExceptionResolver

  • 在Spring MVC中,有SimpleMappingExceptionResolver类,用于配置异常与View组件的映射关系,如果确定某种异常出现后都会显示某个View组件,则在Spring的配置文件中:
1

2

3

4

5

6

7

8

9

10

<bean class="xx.xx.SimpleMappingExceptionResolver">

<property name="exceptionMappings">

<props>

<prop key="异常类的全名">View组件名</prop>

<prop key="异常类的全名">View组件名</prop>

<prop key="异常类的全名">View组件名</prop>

<props>

</property>

</bean>
  • 经过以上配置后,整个项目运行到任何位置,一旦出现以上配置过的异常,都会转发到匹配的View组件,在项目的各个方法中,不必再处理已经配置过的异常!
  • 这种做法的不足在于:只要是同一种异常,都是转发到同一个View组件,无法根据实际运行状态进行更加细化的处理,例如无法提示是哪个值错误或者某些原因导致的异常。

使用@ExceptionHandler

注意:使用SimpleMappingExceptionResolver处理异常时,不可以使用@ExceptionHandler!

  • 当需要统一处理异常时,可以在控制器类中自定义方法(方法名称自定义),并在方法上方添加@ExceptionHandler,与处理请求的方法类似,可以按需添加方法的参数,需要注意的,必须有Exception参数:
1

2

3

4

5

6

7

8

9

10

11

12

13

14

public String (

HttpServletRequest request,

Exception ex) {

System.out.println(ex.getClass());

if (ex instanceof NullPointerException) {

return "error1";

} else if (ex instanceof ArrayIndexOutOfBoundsException) {

return "error2";

} else {

return "error3";

}

}
  • 这种做法,是作用于当前控制器类内部的所有请求的处理!对其它控制器类中的异常是没有影响的!

Spring MVC小结

  1. 解决MVC中V与C的关系的,即如何接收请求并响应;
  2. 在Spring的配置文件中,最主要的配置是组件扫描和ViewResolver;
  3. 重点掌握@RequestMapping注解,还有@RequestParam注解;
  4. 掌握在处理请求时,如何获取请求参数(2种)和封装转发数据(ModelMap);
  5. 理解转发和重定向;
  6. 学会使用Interceptor
  7. 学会处理异常。

原文:大专栏  Springmvc处理异常

原文地址:https://www.cnblogs.com/chinatrump/p/11615106.html

时间: 2024-10-11 11:55:05

Springmvc处理异常的相关文章

SpringMVC 处理异常的4种方式

springmvc处理异常有三种方式: 1.在一个controller中定义一个方法,用@ExceptionHandler注解标注.(优先级最高) @ExceptionHandler public ModelAndView handleException(Exception exception){     ModelAndView mv = new ModelAndView("error/500");     mv.addObject("ex",exception)

springmvc 通过异常增强返回给客户端统一格式

在springmvc开发中,我们经常遇到这样的问题:逻辑正常执行时返回客户端指定格式的数据,比如json,但是遇NullPointerException空指针异常,NoSuchMethodException调用的方法不存在异常,返回给客户端的是服务端异常堆栈信息,导致客户端不能正常解析数据:这明显不是我们想要的. 幸好从spring3.2提供的新注解@ControllerAdvice,从名字上可以看出大体意思是控制器增强.原理是使用AOP对Controller控制器进行增强(前置增强.后置增强.

springmvc中拦截器与springmvc全局异常处理器的问题

最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 中抛出了系统自定义异常, 当时有有个疑惑, 就是抛出的这个异常全局异常处理器怎么处理的. 这里的全局异常处理器时通过实现HandlerExceptionResolver这个借口实现的 要指出的是 resolveException方法 中 handler中代表的是什么,我没遇到这个问题之前我认为这玩

SpringMVC学习--异常处理器

简介 springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. 系统的dao.service.controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图: 自定义异常类 为

springmvc 全局异常解决方案

系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. 系统的dao.service.controller出现都通过throwsException向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图: 1.自定义异常类: package cn.itcast.ssm.exception; public class CustomerException exten

自定义springmvc统一异常处理器(实现HandlerExceptionResolver接口)不起作用的一种情况

ExceptionResolverCustom 这个是自定义的异常处理器类. 在springmvc中注册 在web.xml文件中屏蔽springmvc自动注册的异常处理器 网上的资料就是这么配置的,可自己配置的异常处理器就是不起作用 看下springmvc是如何加载自定义的异常处理器的 可以看到,springmvc从容器中取自定义异常处理器时是通过指定的id去取的, 所以说在springmvc中配置自定义处理器的时候id注意下不要写错,这个id是 handlerExceptionResolver

SpringMVC接口测试异常:Can not deserialize instance of int out of START_OBJECT token

之前使用springmvc搭建了restful风格的接口服务,在使用mockmvc进行集成测试的时候出现了异常:Can not deserialize instance of int out of START_OBJECT token.为什么会出现这个问题?怎么解决这个问题呢?接下来本文详细分析讲解这个问题. 一.问题展现 接口代码 @ResponseBody @RequestMapping(value = "/m1", method = RequestMethod.POST) @Ap

springMVC关于异常优先级的处理

优先级 既然在SpringMVC中有两种处理异常的方式,那么就存在一个优先级的问题: 当发生异常的时候,SpringMVC会如下处理: (1)SpringMVC会先从配置文件找异常解析器HandlerExceptionResolver (2)如果找到了异常异常解析器,那么接下来就会判断该异常解析器能否处理当前发生的异常 (3)如果可以处理的话,那么就进行处理,然后给前台返回对应的异常视图 (4)如果没有找到对应的异常解析器或者是找到的异常解析器不能处理当前的异常的时候,就看当前的Controll

springmvc之异常处理中ExceptionHanderExceptionResolver

1.springmvc通过HandlerExceptionResolver处理程序的异常,包括Handler映射.数据绑定以及目标方法执行时发生的异常. 2.springmvc提供的HandlerExceptionResolver的常用实现类: ExceptionHanderExceptionResolver DefaultHanderExceptionResolver ResponseStatusExceptionResolver SimpleMappingExceptionResolver