SpringMVC异常处理

Dear 丶 2022-05-09 07:16 401阅读 0赞

在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要实现 HandlerExceptionResolver 接口。

一个基于Spring MVC的Web应用程序中,可以存在多个实现了HandlerExceptionResolver的异常处理类,他们的执行顺序,由其order属性决定, order值越小,越是优先执行, 在执行到第一个返回不是null的ModelAndView的Resolver时,不再执行后续的尚未执行的Resolver的异常处理方法。

平常开发的时候,我一般都会配置:,使用了这个配置标签,SpringMVC会默认配置:

  1. ![70][]

一、ExceptionHandlerExceptionResolver接口

在该 controller 类中使用@ExceptionHandler(value= { 大Class数组 }) : 根据异常需求写大Class

  1. //http://127.0.0.1:8080/sshweb/textex?num=1
  2. @RequestMapping(value="/textex")
  3. public String textex(@RequestParam("num") int num) {
  4. System.out.println("商为:" + 10/num);
  5. return "redirect: /sshweb/users";
  6. }
  7. // 必须使用ModelAndView, 而不是String, 否则 无法渲染试图
  8. @ExceptionHandler(value= {ArithmeticException.class})
  9. public ModelAndView HandlerEX(Exception e) {
  10. System.out.println("出异常了---" + e.getMessage());
  11. ModelAndView mv = new ModelAndView();
  12. mv.addObject("ex", e.getMessage());
  13. mv.setViewName("error");
  14. return mv;
  15. }
  16. 要把异常信息注入到 error.jsp 页面, 必须返回 ModelAndView
  17. <body>
  18. <h4>错误页面</h4>
  19. 异常信息为: ${ex }
  20. </body>

70 1

需要注意的是,上面例子中的ExceptionHandler方法的作用域,只是在本Controller类中。

如果需要使用ExceptionHandler来处理全局的Exception,则创建一个类需要使用@ControllerAdvice注解。

自定义 HandlerGlobalEX 类: 处理全局的(ArithmeticException.class,RuntimeException.class)

  1. @ControllerAdvice
  2. public class HandlerGlobalEX{
  3. // 必须使用ModelAndView, 而不是String, 否则 无法渲染试图
  4. @ExceptionHandler(value= {ArithmeticException.class,RuntimeException.class})
  5. public ModelAndView HandlerEX(Exception e) {
  6. System.out.println("出异常了---" + e.getMessage());
  7. ModelAndView mv = new ModelAndView();
  8. mv.addObject("ex", e.getMessage());
  9. mv.setViewName("error");
  10. return mv;
  11. }
  12. }

#

二、SimpleMappingExceptionResolver,不用自己写处理异常类,直接配置就ok:

1) springmvc.xml 配置文件中配置异常处理器:

  1. <!-- 配置全局异常处理的处理器: -->
  2. <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  3. <!-- 配置order为-1,表示优先级最高 -->
  4. <property name="order" value="-1" />
  5. <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 -->
  6. <property name="defaultErrorView" value="error"></property>
  7. <!-- 不写exceptionAttribute,默认的异常信息的引用名:exception,可修改 -->
  8. <property name="exceptionAttribute" value="ex"></property>
  9. <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常页名作为值 -->
  10. <property name="exceptionMappings">
  11. <props>
  12. <prop key="java.lang.RuntimeException">error-runtime</prop>
  13. <prop key="java.lang.ArithmeticException">error-arith</prop>
  14. <!-- 这里还可以继续扩展对不同异常类型的处理 -->
  15. </props>
  16. </property>
  17. </bean>

SimpleMappingExceptionResolver 会把异常信息注入到error.jsp页面,默认异常信息的引用名:exception,这个默认名字是可以通过 修改.

2) error-arith.jsp :

  1. <body>
  2. <h4>算数异常</h4>
  3. 异常信息为: ${ex } <br/>
  4. 异常信息为: ${exception } <br/>
  5. 异常信息为: ${ex.message }
  6. </body>
  7. ![70 2][] ![70 3][]

附一张图(来自网络):

SpringMVC的请求处理的全过程示意图

70 4

发表评论

表情:
评论列表 (有 0 条评论,401人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringMVC 异常处理

    如果在请求处理的时候,出现了异常,那它的输出依然会是Servlet响应。异常必须要以某种方式转换为响应。 Spring提供了多种方式将异常转换为响应: 1. 特定的Spr

    相关 SpringMVC处理异常

    Spring提供了多种方式将异常转换为响应:     1.特定的Spring异常将会自动映射为指定的HTTP状态码;     2.异常上可以添加@ResponseSta

    相关 springMVC异常处理

    异常处理思路: 系统中异常包括两种:预期异常和运行时异常RuntimeException.前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异

    相关 SpringMVC异常处理

      在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要实现 HandlerExceptionResolver 接口。 一个基于Spring

    相关 SpringMVC 异常处理

    如果我们的代码出现异常时一般会在页面很生硬的把异常打印出来,一是这样很难看再就是显得页面很没有水准,此时我们就可以使用异常处理器使页面出现异常时跳转到一个比较友好的错误提示页面