Spring面试题, Spring MVC 中如何处理异常?
Spring面试题, Spring MVC 中如何处理异常?
QA
Step 1
Q:: Spring MVC 中如何处理异常?
A:: 在 Spring MVC 中处理异常可以通过多种方式实现,主要有以下几种:
1. 使用 @ExceptionHandler 注解:可以在控制器类中定义一个方法,并使用 @
ExceptionHandler 注解来指定处理特定异常类型。
2. 使用 @ControllerAdvice 注解:可以定义一个全局异常处理类,使用 @ControllerAdvice 注解,并结合 @
ExceptionHandler 注解来处理应用中所有控制器的异常。
3.
配置全局异常处理器:通过实现 HandlerExceptionResolver 接口来自定义全局异常处理器,比如 SimpleMappingExceptionResolver。
4. 自定义异常页面:通过配置 web.
xml 文件或在 Spring 配置中设置特定异常类型的错误页面。
5.
使用 ResponseStatusException:在控制器中直接抛出 ResponseStatusException,并指定 HTTP 状态码和原因。
这些方法可以帮助开发人员在不同层次上灵活地处理应用中的异常情况。
Step 2
Q:: @
ExceptionHandler 注解的使用方法是什么?
A:: @
ExceptionHandler 注解用于在控制器类中定义异常处理方法。例如:
@Controller
public class MyController {
@ExceptionHandler(MyException.class)
public ModelAndView handleMyException(MyException ex) {
ModelAndView mav = new ModelAndView("error");
mav.addObject("message", ex.getMessage());
return mav;
}
}
在上面的代码中,当 MyException 异常被抛出时,handleMyException 方法会被调用,并返回一个带有错误信息的视图。
Step 3
Q:: @
ControllerAdvice 注解的作用是什么?
A:: @
ControllerAdvice 注解用于定义一个全局的异常处理类,该类可以处理所有控制器抛出的异常。例如:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleAllExceptions(Exception ex) {
ModelAndView mav = new ModelAndView("error");
mav.addObject("message", ex.getMessage());
return mav;
}
}
这样,无论哪个控制器抛出异常,handleAllExceptions 方法都会被调用。
Step 4
Q:: 如何自定义 Spring MVC 的全局异常处理器?
A:: 可以通过实现 HandlerExceptionResolver 接口来自定义全局异常处理器。例如:
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView mav = new ModelAndView("error");
mav.addObject("message", ex.getMessage());
return mav;
}
}
然后在 Spring 配置文件中注册这个自定义的异常处理器。