Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 381|回复: 0

使用springMVC进行统一的异常处理

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-6-30 15:17:46 | 显示全部楼层 |阅读模式

    无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了。跟其他MVC框架一样,springMVC也有自己的异常处理机制。
    springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,另一种是使用注解的方式实现一个专门用于处理异常的Controller——ExceptionHandler。

     

    1、实现自己的HandlerExceptionResolver,HandlerExceptionResolver是一个接口,springMVC本身已经对其有了一个自身的实现——DefaultExceptionResolver,该解析器只是对其中的一些比较典型的异常进行了拦截处理。

    Java代码    收藏代码
    1. import javax.servlet.http.HttpServletRequest;  
    2. import javax.servlet.http.HttpServletResponse;  
    3.   
    4. import org.springframework.web.servlet.HandlerExceptionResolver;  
    5. import org.springframework.web.servlet.ModelAndView;  
    6.   
    7. public class ExceptionHandler implements HandlerExceptionResolver {  
    8.   
    9.     @Override  
    10.     public ModelAndView resolveException(HttpServletRequest request,  
    11.             HttpServletResponse response, Object handler, Exception ex) {  
    12.         // TODO Auto-generated method stub  
    13.         return new ModelAndView("exception");  
    14.     }  
    15.   
    16. }  

     上述的resolveException的第4个参数表示对哪种类型的异常进行处理,如果想同时对多种异常进行处理,可以把它换成一个异常数组。

    定义了这样一个异常处理器之后就要在applicationContext中定义这样一个bean对象,如:

    Xml代码    收藏代码
    1. <bean id="exceptionResolver" class="com.tiantian.xxx.web.handler.ExceptionHandler"/>  
     

    2、使用@ExceptionHandler进行处理

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

    如:

    Java代码    收藏代码
    1. import org.springframework.stereotype.Controller;  
    2. import org.springframework.web.bind.annotation.ExceptionHandler;  
    3. import org.springframework.web.bind.annotation.RequestMapping;  
    4.   
    5. import com.tiantian.blog.web.servlet.MyException;  
    6.   
    7. @Controller  
    8. public class GlobalController {  
    9.   
    10.       
    11.     /** 
    12.      * 用于处理异常的 
    13.      * @return 
    14.      */  
    15.     @ExceptionHandler({MyException.class})  
    16.     public String exception(MyException e) {  
    17.         System.out.println(e.getMessage());  
    18.         e.printStackTrace();  
    19.         return "exception";  
    20.     }  
    21.       
    22.     @RequestMapping("test")  
    23.     public void test() {  
    24.         throw new MyException("出错了!");  
    25.     }  
    26.       
    27.       
    28. }  

     这里在页面上访问test方法的时候就会报错,而拥有该test方法的Controller又拥有一个处理该异常的方法,这个时候处理异常的方法就会被调用

     

     

     

    当发生异常的时候,上述两种方式都使用了的时候,第一种方式会将第二种方式覆盖

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-1 14:51 , Processed in 0.059299 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表