SpringMVC之异常处理

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
SpringMVC之异常处理


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

在 Java Web 开发中,异常处理是一个非常重要的环节。它确保了程序能够在出现异常情况时合理地处理错误,而不会导致系统崩溃或出现不友好的错误提示。SpringMVC 作为一个流行的 Web 框架,提供了一套完善的异常处理机制,使得开发者能够更方便地处理异常情况。
在本博客中,我们将深入探讨 SpringMVC 中的异常处理。我们将从介绍 SpringMVC 中异常处理的相关配置和注解。此外,我们还将通过实际的代码示例来说明如何在 SpringMVC 控制器中捕获和处理异常。
通过阅读本博客,你将对 SpringMVC 中的异常处理有更深入的理解,并能够在实际项目中更好地应用异常处理机制,提高系统的稳定性和可靠性。无论你是 SpringMVC 的新手还是有经验的开发者,都能从本博客中获得一些有价值的信息和技巧。让我们开始探索 SpringMVC 异常处理的世界吧!


提示:以下是本篇文章正文内容,下面案例可供参考

一、单个异常处理

1.创建一个自定义的异常类,用于表示要处理的异常情况:

public class CustomException extends Exception {
   
    // 自定义异常类的构造函数,用于传递异常消息
    public CustomException(String message) {
   
        super(message);
    }
}

2.在控制器方法上添加@ExceptionHandler注解,并指定要处理的异常类型:

 // 添加@ExceptionHandler,表示该方法是处理异常的方法,属性为处理的异常类
@ExceptionHandler(CustomException.class)
public ModelAndView handleCustomException(CustomException ex, HttpServletRequest request, HttpServletResponse response) {
   
    // 构建 ModelAndView 对象,用于返回给客户端
    ModelAndView modelAndView = new ModelAndView("error");
    // 将异常消息添加到 Model 中
    modelAndView.addObject("error", ex.getMessage());
    return modelAndView;
}

3.在控制器的其他方法中抛出CustomException异常:

public void throwCustomException(HttpServletRequest request, HttpServletResponse response) {
   
    // 模拟抛出 CustomException 异常
    throw new CustomException("这是一个自定义异常消息");
}

在上述示例中,我们创建了一个名为CustomException的自定义异常类,并在控制器方法throwCustomException中模拟抛出了这个异常。然后,我们使用@ExceptionHandler注解在另一个方法handleCustomException上标注该方法为异常处理方法,并指定要处理的异常类型为CustomException。
当throwCustomException方法中抛出CustomException异常时,SpringMVC会自动调用handleCustomException方法来处理异常。在handleCustomException方法中,我们构建了一个ModelAndView对象,将异常消息作为错误信息传递给客户端。
通过使用@ExceptionHandler注解,我们可以在一个地方集中处理控制器中抛出的特定类型的异常,从而提高代码的可维护性和可读性。
请注意,在实际应用中,你可以根据需要处理不同类型的异常,并在处理方法中执行适当的逻辑,例如记录异常、向用户显示错误消息等。

二、全局异常处理

在控制器中定义异常处理方法只能处理该控制器类的异常,要想处理所有控制器的异常,需要定义全局异常处理类。

// 全局异常处理器类,需要添加@ControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler {
   
  /**
   * 异常处理方法
   *
   * @param ex   异常对象
   * @param model 模型对象
   * @return
   */
  // 添加@ExceptionHandler,表示该方法是处理异常的方法,属性为处理的异常类
  @ExceptionHandler({
   java.lang.NullPointerException.class, java.lang.ArithmeticException.class})
  public String exceptionHandle1(Exception ex, Model model) {
   
    // 向模型中添加异常对象
    model.addAttribute("msg", ex);
    // 跳转到异常页面
    return "error";
   }


  // 方法一不能处理的异常交给方法二处理
  @ExceptionHandler(java.lang.Exception.class)
  public String exceptionHandle2(Exception ex, Model model) {
   
    model.addAttribute("msg", ex);
    return "error2";
   }
}

三、自定义异常处理

自定义异常处理器实现HandlerExceptionResolver接口,并放入Spring容器中。

// 自定义异常处理器实现HandlerExceptionResolver接口,并放入Spring容器中
@Component
public class MyExceptionHandler implements HandlerExceptionResolver {
   
  @Override
  public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
   
    ModelAndView modelAndView = new ModelAndView();
    if (e instanceof NullPointerException) {
   
      modelAndView.setViewName("error");
     } else {
   
      modelAndView.setViewName("error2");
     }
    modelAndView.addObject("msg", e);
    return modelAndView;
   }
}


总结

提示:这里对文章进行总结:
@ExceptionHandler:这是一个注解,用于指定方法作为异常处理器。它的属性是要处理的异常类列表。例如,属性可以为NullPointerException 和 ArithmeticException。
@ControllerAdvice:这是一个注解,表示该类是一个全局的控制器advice。它使得这个类中的方法可以处理控制器层面的异常。
自定义异常处理器实现HandlerExceptionResolver接口,并放入Spring容器中。

相关推荐

  1. SpringMVC异常处理

    2023-12-27 21:22:02       40 阅读
  2. SpringMVC异常处理

    2023-12-27 21:22:02       16 阅读
  3. SpringMVC处理响应

    2023-12-27 21:22:02       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-27 21:22:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-27 21:22:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-27 21:22:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-27 21:22:02       20 阅读

热门阅读

  1. UBX M8T-10 DSP开发和NMEA解析

    2023-12-27 21:22:02       42 阅读
  2. 使用Python实现Linux惠尔顿上网认证客户端

    2023-12-27 21:22:02       38 阅读
  3. F (1164) : B DS二叉排序树_有效的二叉排序树

    2023-12-27 21:22:02       42 阅读
  4. 编译时AndroidX冲突报错

    2023-12-27 21:22:02       34 阅读
  5. Request对象和Response对象

    2023-12-27 21:22:02       37 阅读
  6. 数据可视化期末整理(自用)

    2023-12-27 21:22:02       37 阅读
  7. 蓝桥杯python比赛历届真题经典练习题 (1-3)

    2023-12-27 21:22:02       42 阅读
  8. 悟的数组匹配

    2023-12-27 21:22:02       42 阅读
  9. 基于大数据技术的智慧城市交通流量预测与优化

    2023-12-27 21:22:02       31 阅读
  10. http笔记

    2023-12-27 21:22:02       34 阅读