SpringMVC之异常处理

发布时间:2023年12月27日

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
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容器中。

文章来源:https://blog.csdn.net/liubopro666/article/details/135185166
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。