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