当前位置: 首页 > news >正文

SpringMVC三种异常处理方式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Spring MVC处理异常有3种方式: 
(1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver; 
(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;

(3)使用@ExceptionHandler注解实现异常处理。

方法一:SimpleMappingExceptionResolver:

springMVC-servlet.xml

<beanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  定义默认的异常处理页面,当该异常类型的注册时使用
  <property name="defaultErrorView" value="error">
  </property>
  定义异常处理页面用来获取异常信息的变量名,默认名为exception
  <propertyname="exceptionAttribute"value="ex"></property>
  定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值
  <property name="exceptionMappings">
  <props>
  <propkey="etc.exception.MyException">error-my</prop>
  这里还可以继续扩展对不同异常类型的处理
  </props>
  </property>
 </bean> 

方法二:HandlerExceptionResolver 

public class MyExceptionHandler{  
      
    @ExceptionHandler  
    public ModelAndView resolveException(HttpServletRequest request,  
            HttpServletResponse response, Object handler, Exception ex) {  
        Map<String, Exception> map = new HashMap<String, Exception>();  
        map.put("ex",ex);  
          
        // 根据获取的Exception参数进行view跳转  
        if (ex instanceof MyException) {  
            return new ModelAndView("error-my",map);  
        } else {  
            return new ModelAndView("error",map);  
        }  
    }  
} 

定义了这样一个异常处理器之后就要在springMVC-servlet.xml中定义这样一个bean对象,如

<bean id="myExceptionHandler" class="com.tiantian.xxx.web.handler.myExceptionHandler"/> 

 

方法三.使用@ExceptionHandler进行处理

使用@ExceptionHandler进行处理有一个不好的地方是进行异常处理的方法必须与出错的方法在同一个Controller里面

如:

import org.springframework.stereotype.Controller;     
import org.springframework.web.bind.annotation.ExceptionHandler;     
import org.springframework.web.bind.annotation.RequestMapping;     
    
import com.tiantian.blog.web.servlet.MyException;     
    
@Controller    
public class GlobalController {     
    
         
    /**   
     * 用于处理异常的   
     * @return   
     */    
    @ExceptionHandler({MyException.class})     
    public String exception(MyException e) {     
        System.out.println(e.getMessage());     
        e.printStackTrace();     
        return "exception";     
    }     
         
    @RequestMapping("test")     
    public void test() {     
        throw new MyException("出错了!");     
    }     
         
         
}  

参考:

SpringMVC杂记(十七) HandlerMethodArgumentResolver接口应用example

转载于:https://my.oschina.net/ososchina/blog/1590901

相关文章:

  • .NET 常见的偏门问题
  • CentOS6.4 安装LVS-RRD监控LVS
  • java8集合--LinkedList纯源码
  • 函数:递归是神马 - 零基础入门学习Python022
  • OSS控制台新增函数计算处理事件入口
  • 抽象类和接口
  • ABP理论学习之SignalR集成
  • Eclipse Java EE IDE 创建 Dynamic Web project问题
  • 集成第三方接口的技巧总结
  • 开始VS 2012 中LightSwitch系列的第2部分:感受关爱——定义数据关系
  • 在左上角倾斜四十五度显示的TextView
  • java IO类简单介绍
  • 高新集训记录
  • css控制大幻灯绝对居中(非背景)
  • Java synchronized用法
  • 【知识碎片】第三方登录弹窗效果
  • C++类的相互关联
  • JavaScript函数式编程(一)
  • Javascript设计模式学习之Observer(观察者)模式
  • Linux CTF 逆向入门
  • mongodb--安装和初步使用教程
  • Promise面试题2实现异步串行执行
  • use Google search engine
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 第十八天-企业应用架构模式-基本模式
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 实战|智能家居行业移动应用性能分析
  • 使用API自动生成工具优化前端工作流
  • 小程序 setData 学问多
  • python最赚钱的4个方向,你最心动的是哪个?
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • !$boo在php中什么意思,php前戏
  • #单片机(TB6600驱动42步进电机)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十八)三元表达式和列表解析
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (原創) 未来三学期想要修的课 (日記)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET CF命令行调试器MDbg入门(一)
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • @Mapper作用
  • @Not - Empty-Null-Blank
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • @基于大模型的旅游路线推荐方案
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [ 手记 ] 关于tomcat开机启动设置问题