每天学点SpringMVC-异常处理
1. 第一步先写个Hello World
1.1 编写一个抛出异常的目标方法
@RequestMapping("/testException.do")
public String testException(){
int i = 1 / 0 ;
return "index" ;
}
1.2 当前Controller中添加@ExceptionHandler标记方法
@ExceptionHandler(value = {ArithmeticException.class})
public ModelAndView handleArithException(Exception ex){
ModelAndView mv = new ModelAndView("error") ;
mv.addObject("ex",ex) ;
return mv ;
}
1.3 加上error界面

1.4 测试结果

1.5 总结一下
1)@ExceptionHandler标记的方法在目标方法发生对应的异常触发,传入的参数Exception即为对应的异常对象
2)不能通过参数中添加Map的形式将异常对象传递的界面,需要用ModelAndView的形式实现
3)优先级:优先在当前Controller中@ExceptionHandler标记的方法,如果有多个,谁标记的异常越接近,则选择谁,如果当前Controller没有匹配到,则在@ControllerAdvice标记的类中找@ExceptionHandler标记的方法
2. @ResponseStatus注解能够实现目标异常产生时,反馈给client端指定的状态码跟信息
2.1 构建目标异常并添加@ResponseStatus注解
@ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "test")
public class TestException extends RuntimeException {
}
2.2 构建测试RequestMapper
@RequestMapping("/testResponseStatus.do")
public String testResponseStatus(){
throw new TestException() ;
}
2.3 测试结果如下

2.4 如果指定异常被ExceptionHandler捕获时,发生什么?
1)在上述ExceptionHandler中添加TextException

2)重新部署测试结果

3. 可通过spring-mvc.xml配置ExceptionResolver实现指定异常发送跳转到指定页面
3.1 定义指定异常
public class TestDefaultException extends RuntimeException {
}
3.2 spring-mvc.xml中进行配置
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error"></property>
<property name="exceptionAttribute" value="ex"/>
<property name="exceptionMappings">
<props>
<prop key="com.pawn.crud.exceptions.TestDefaultException">error</prop>
</props>
</property>
</bean>
3.3 测试
@RequestMapping("/testDefaultException.do")
public String testDefaultException(){
throw new TestDefaultException() ;
}

3.4 有个小坑:指定的异常不能加@ResponseStatus注解,否则配置的ExceptionResolver会失效
demo:https://github.com/705645051/demoCrud
每天学点SpringMVC-异常处理的更多相关文章
- SpringMVC异常处理机制详解[附带源码分析]
目录 前言 重要接口和类介绍 HandlerExceptionResolver接口 AbstractHandlerExceptionResolver抽象类 AbstractHandlerMethodE ...
- SpringMVC异常处理机制
SpringMVC异常处理机制 springMVC会将所有在doDispatch方法中的异常捕获,然后处理.无法处理的异常会抛出给容器处理. 在doDispatch()中调用processDispat ...
- 【SpringMVC】SpringMVC 异常处理
SpringMVC 异常处理 文章源码 异常处理思路 系统中异常包括两类:预期异常和运行时异常,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. Cont ...
- SpringMvc异常处理
SpringMvc通过HandlerExceptionResolver处理程序的异常,包括Handler映射.数据绑定.以及方法执行时发生的异常,SpringMvc提供的HandlerExceptio ...
- SpringMVC 异常处理
SpringMVC学习系列(10) 之 异常处理 在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的.那么如何保证我们处理异常的代码 ...
- SpringMVC异常处理方式
一.描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合 ...
- SpringMVC——异常处理
Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射.数据绑定以及目标方法执行时发生的异常. SpringMVC 提供的 Handl ...
- springmvc异常处理(非注解与注解)
1.异常 程序中的异常一般分为两类:预期异常,运行时异常.前者是我们可预知的,我们一般通过捕获和抛出方式处理这些异常.后者主要通过代码规范.测试等手段来减少异常的发生.一般,我们在系统的DAO.Ser ...
- (十一)springMvc 异常处理
文章目录 思路 自定义异常处理类 全局异常处理器 配置全局异常处理器 思路 在 springMvc 中,异常一层一层的往上抛,最后抛给 前端控制器,前端控制器内部会去找 全局异常处理器(一个系统只会有 ...
- springMVC异常处理(自定义异常)HandlerExceptionResolver
注:本篇的异常主要指的是controller.service和dao层中执行方法抛出的异常. 一.为什么要处理异常? 因为如果我们不处理异常,异常信息就会直接抛出给浏览器,于是浏览器页面就直接显示异常 ...
随机推荐
- python+selenium自动化软件测试(第16章):基础实战(3)
#coding:utf-8 from time import sleep from selenium import webdriver class cloudedge_register(object) ...
- jquery的2.0.3版本源码系列(2):21行-94行定义了一些变量和函数 jQuery=function(){}
2.1.bug通过索引查询 这里的#13335是bug的索引,如何查询呢? 第一步,浏览器地址栏输入"https://bugs.jquery.com/". 第二步,在网页的搜索框里 ...
- Dom-创建标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript如何用递归写一个简单的树形结构
现在有一个数据,需要你渲染出对应的列表出来: var data = [ {"id":1}, {"id":2}, {"id":3}, {&qu ...
- 获取ip地址及城市信息
大家好,今天给大家分享的是一个简单的知识获取登录用户的ip地址及城市信息,lz是一个小白,如果有哪些错误的地方 欢迎大家指出 东西很简单,直接上代码 [HttpPost] public string ...
- js中bind、call、apply函数的用法 (转载)
最近看了一篇不错的有关js的文章,转载过来收藏先!!! 最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 j ...
- Spark Submit 脚本
当我们需要命令行传递参数时候,将--class 写在前面,然后是jar 最后是参数 spark-submit --master yarn --num-executors 3 --executor-me ...
- 根据本周本月本日来查询数据 C#winform数据查询
这个我是在winform的页面上做的 1. 首先是在页面上添加3个lable 第一次点击lable会有相应的数据被查询出来 第二次点击同一个lable会刷新所有的数据 2.点击不同的label会 ...
- java Properties类得到当前的系统属性
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt218 package com.shi.simpleUtil; import ...
- oop 第三次作业 文件读写
oop第三次作业 GitHub 对于迟交我感到很抱歉 031602510 体会 这次的用到了之前的文件读写,传参 定义函数有返回值,使代码更加简洁.面向对象的程序设计,在面对函数多元的情况下,编程更加 ...