springmvc之异常处理中ExceptionHanderExceptionResolver

1、springmvc通过HandlerExceptionResolver处理程序的异常,包括Handler映射、数据绑定以及目标方法执行时发生的异常。

2、springmvc提供的HandlerExceptionResolver的常用实现类:

  • ExceptionHanderExceptionResolver
  • DefaultHanderExceptionResolver
  • ResponseStatusExceptionResolver
  • SimpleMappingExceptionResolver

3、DispatchServlet默认装配HanderExceptionResolver

在java中:

    @ExceptionHandler({RuntimeException.class})
    public ModelAndView handleArithmeticException2(Exception ex) {
        System.out.println("出异常了--->:"+ex);
        ModelAndView mv = new ModelAndView("error");
        mv.addObject("exception",ex);
        return mv;
    }

    @ExceptionHandler({ArithmeticException.class})
    public ModelAndView handleArithmeticException(Exception ex) {
        System.out.println("出异常了:"+ex);
        ModelAndView mv = new ModelAndView("error");
        mv.addObject("exception",ex);
        return mv;
    }

    @RequestMapping("/testExceptionHandlerExceptionReslover")
    public String testExceptionHandlerExceptionReslover(@RequestParam("i") Integer i) {
        System.out.println("result-->"+(10 / i));
        return "success";
    }

index.jsp

<a href="testExceptionHandlerExceptionReslover?i=10">testExceptionHandlerExceptionReslover</a>

success.jsp

    <p>success</p>

error.jsp

    <h4>error page</h4>
    ${exception}

启动服务器之后:

点击:

将I=10改为i=0并刷新:

在控制台可看到:

说明:

(1)在@ExceptionHandler方法的入参中可以加入Exception类型的参数,该参数即对应发生的异常对象。

(2)在@ExceptionHandler方法的入参中不能传入Map,若希望将异常信息传到前端页面上,需要使用ModelAndView。

(3)@ExceptionHandler方法标记的异常有优先级问题。

(4)@ControllerAdvice:如果在当前Handler中找不到@ExceptionHandler方法标记的出现的异常,则会在@ExceptionHandler标记的类中查找@ExceptionHandler标记的方法来处理异常。

比如我们新建一个java文件,在里面加入:

package com.gong.springmvc.test;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice
public class HandleException {
    @ExceptionHandler({ArithmeticException.class})
    public ModelAndView handleArithmeticException(Exception ex) {
        System.out.println("出异常了:"+ex);
        ModelAndView mv = new ModelAndView("error");
        mv.addObject("exception",ex);
        return mv;
    }
}

仍可以达到相同的效果。

原文地址:https://www.cnblogs.com/xiximayou/p/12194453.html

时间: 2024-11-12 01:59:36

springmvc之异常处理中ExceptionHanderExceptionResolver的相关文章

异常处理中throws和throw的区别?

异常处理中throws和throw的区别: 1.作用不同:throw用于程序员自行产出并抛出异常:throws用于声明在该方法内抛出了异常 2.使用的位置不同:throw位于方法体内部,可以作为单独语句使用:throws必须跟在方法参数列表的后面,不能单独使用. 3.内容不同:throw抛出一个异常对象,且只能是一个:throws后面跟异常类,而且可以有多个 原文地址:https://www.cnblogs.com/suger-4/p/12192418.html

windows 异常处理中VEH、SEH、UEH、VCH 之间的关系

1.当异常交由用户处理时,按照以下顺序调用异常处理方式VEH-〉SEH-〉VCH .2.当VEH表示处理了异常,就不会传递给SEH,但是会传递异常给VCH .3.当VEH没有处理了,就会传递给SEH.4.当SEH的所有异常处理函数没能够处理异常,会调用默认的SEH(就是UEH,只是方式属于SEH)处理函数.5.当SEH处理了异常,从 except 开始执行,就不会再将异常传递给VCH .6.当SEH返回异常产生处执行,在返回之前会调用VCH .注意!!!在 *unix 中是用信号来处理的.所以如

异常处理中try,else,finally含有return的情况解析

直接看代码,拿到你的py下运行测试一下就 明白了. 例一: def f(): try: print(1) return 3 finally: print(2) return 0 print(f()) #120 若注释掉finally内的return 结果为123 #解释-----一个函数只会有一个返回值,若try和finally同时存在的话,finally会覆盖掉try的return并执行,所以函数结束了. 例二: def f(): try: print(1) return 1 except:

PO状态为“处理中”的处理方法

EBS中经常会出现PO提交审批后状态为"处理中"的情况,此时PO创建人无法打开,审批人也无法打开,工作流等查看也无异常,可以使用一下SQL处理再进行审批: --set serveroutput on size 100000DECLARE CURSOR POTORESET IS SELECT WF_ITEM_TYPE, WF_ITEM_KEY, PO_HEADER_ID, SEGMENT1, REVISION_NUM, TYPE_LOOKUP_CODE FROM PO_HEADERS_A

批处理中set截取字符详解

set截取字符详解  在批处理中,set的功能有点繁杂:设置变量.显示环境变量的名及值.做算术运算.等待用户的输入.字符串截取.替换字符串,是我们常用的命令之一. 在字符串截取方面,新手因为没能注意到偏移量的问题,很容易提取到错误的字符串,因此,特开此帖,详细解释 set 截取字符的用法. 我们先来看一个例子: set str=123456789 现在,我需要提取变量 str 中的第一个字符,那么,该怎么写命令呢? set var=%str:~1,1%?我想,这很可能是很多粗懂set用法的新手们

SpringMVC 处理异常的4种方式

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

批处理中Copy与Xcopy命令的区别(转自:www.jbxue.com)

有关批处理脚本中,copy命令与xcopy命令在用法上的一些区别.原文地址:http://www.jbxue.com/article/14536.html Copy与Xcopy的区别一,copy不能在有子目录存在的文件中拷贝文件的同时重命名此文件名说明,这里C:为根目录,bat为子目录),而xcopy能,不过会出现提示,当然可以加参数而不使它提示. C:\>copy c:\bat\hai.bat d:\bat\hello.bat提示:系统找不到指定的路径. 已复制 0 个文件.可以这样: C:\

关于cobol batch处理中的restart

批量文件处理中,如果因为某条数据错误导致了job abend,重新启动job再处理,几十分钟甚至几个小时的作业丢失对于分秒必争的batch cycle就是个噩梦! 尤其是对DB2和file同时处理的关键程序,job abend,DB2 roll back,但是VSAM file却是已写的已经写进去,已更新的已经更新,无法保持同步,再re-run,数据一片狼藉. 有一个很好的practice能够解决上述问题.注意,一下三部分是协同运作,从而保证DB2, VSAM, Sequential file保

批处理中set截取字符具体解释

set截取字符具体解释  在批处理中,set的功能有点繁杂:设置变量.显示环境变量的名及值.做算术运算.等待用户的输入.字符串截取.替换字符串,是我们经常使用的命令之中的一个. 在字符串截取方面,新手由于没能注意到偏移量的问题,非常easy提取到错误的字符串,因此,特开此帖,详解 set 截取字符的使用方法. 我们先来看一个样例: set str=123456789 如今,我须要提取变量 str 中的第一个字符,那么,该怎么写命令呢? set var=%str:~1,1%?我想,这非常可能是非常