SpringMVC统一异常处理实例代码

 更新时间:2019年11月29日 11:33:13   作者:这个世界~  
这篇文章主要介绍了SpringMVC统一异常处理实例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、需求

  • 一般项目中都需要作异常处理,基于系统架构的设计考虑,使用统一的异常处理方法。
  • 系统中异常类型有哪些?
  • 包括预期可能发生的异常、运行时异常(RuntimeException),运行时异常不是预期会发生的。
  • 针对预期可能发生的异常,在代码手动处理异常可以try/catch捕获,可以向上抛出。
  • 针对运行时异常,只能通过规范代码质量、在系统测试时详细测试等排除运行时异常。

二、统一异常处理解决方案

2.1 定义异常

针对预期可能发生的异常,定义很多异常类型,这些异常类型通常继承于Exception。

这里定义一个系统自定义异常类:

CustomException,用于测试。

public class CustomException extends Exception {
  
  //异常信息
  private String message;
  
  public CustomException(String message){
    super(message);
    this.message = message;
    
  }
  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }
  
}

2.2 异常处理

要在一个统一异常处理的类中要处理系统抛出的所有异常,根据异常类型来处理。

统一异常处理的类是什么?

前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常,进行异常处理。

在系统中自定义统一的异常处理器,写系统自己的异常处理代码。

统一异常处理器实现HandlerExceptionResolver接口。

public class CustomExceptionResolver implements HandlerExceptionResolver {

  //前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常就会执行此方法
  //handler最终要执行的Handler,它的真实身份是HandlerMethod
  //Exception ex就是接收到异常信息
  @Override
  public ModelAndView resolveException(HttpServletRequest request,
      HttpServletResponse response, Object handler, Exception ex) {
    //输出异常
    ex.printStackTrace();
    
    //统一异常处理代码
    //针对系统自定义的CustomException异常,就可以直接从异常类中获取异常信息,将异常处理在错误页面展示
    //异常信息
    String message = null;
    CustomException customException = null;
    //如果ex是系统 自定义的异常,直接取出异常信息
    if(ex instanceof CustomException){
      customException = (CustomException)ex;
    }else{
      //针对非CustomException异常,对这类重新构造成一个CustomException,异常信息为“未知错误”
      customException = new CustomException("未知错误");
    }
    
    //错误 信息
    message = customException.getMessage();
    
    request.setAttribute("message", message);

    
    try {
      //转向到错误 页面
      request.getRequestDispatcher("/WEB-INF/jsp/error.jsp").forward(request, response);
    } catch (ServletException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
    return new ModelAndView();
  }

}

2.3 配置统一异常处理器

<!-- 定义统一异常处理器 -->
  <bean class="com.hao.ssm.exception.CustomExceptionResolver"></bean>

2.4 异常处理逻辑

  • 根据不同的异常类型进行异常处理。
  • 系统自定义的异常类是CustomException ,在controller方法中、service方法中手动抛出此类异常。
  • 针对系统自定义的CustomException异常,就可以直接从异常类中获取异常信息,将异常处理在错误页面展示。
  • 针对非CustomException异常,对这类重新构造成一个CustomException,异常信息为“未知错误”,此类错误需要在系统测试阶段去排除。
  • 在统一异常处理器CustomExceptionResolver中实现上边的逻辑。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java压缩zip文件中文乱码问题解决方法

    java压缩zip文件中文乱码问题解决方法

    这篇文章主要介绍了java压缩zip文件中文乱码问题的解决方法,需要的朋友可以参考下
    2014-07-07
  • Spring Cloud Feign性能优化代码实例

    Spring Cloud Feign性能优化代码实例

    这篇文章主要介绍了Spring Cloud Feign性能优化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java中的WeakHashMap详解

    Java中的WeakHashMap详解

    这篇文章主要介绍了Java中的WeakHashMap详解,WeakHashMap可能平时使用的频率并不高,但是你可能听过WeakHashMap会进行自动回收吧,下面就对其原理进行分析,需要的朋友可以参考下
    2023-09-09
  • SpringCloud hystrix断路器与局部降级全面介绍

    SpringCloud hystrix断路器与局部降级全面介绍

    什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作
    2022-10-10
  • Spring请求传递参数的解决方案

    Spring请求传递参数的解决方案

    访问不同的路径,就是发送不同的请求.在发送请求时,可能会带⼀些参数,所以我们在学习Spring的请求时,主要是学习如何传递参数到后端以及后端如何接收,下面给大家讲解 Spring请求传递参数详解,一起看看吧
    2024-01-01
  • Java多线程的实现方式比较(两种方式比较)

    Java多线程的实现方式比较(两种方式比较)

    Java多线程实现方式有两种,第一种是继承Thread类,第二种是实现Runnable接口,两种有很多差异,下面跟着本文一起学习吧
    2015-11-11
  • java实现简单的汽车租赁系统

    java实现简单的汽车租赁系统

    这篇文章主要为大家详细介绍了java实现简单的汽车租赁系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java实现简单的银行管理系统的示例代码

    Java实现简单的银行管理系统的示例代码

    这篇文章主要介绍了如何利用Java实现简单的银行管理系统,可以实现存款,取款,查询等功能,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-09-09
  • java如何获取实体类的属性名和属性值

    java如何获取实体类的属性名和属性值

    这篇文章主要介绍了java如何获取实体类的属性名和属性值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java 空和null的区别

    Java 空和null的区别

    本文主要介绍了Java 空和null的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04

最新评论