异常处理器需要实现HandlerExceptionResolver

  1. @Component
  2. public class ExceptionResolver implements HandlerExceptionResolver {
  3. public ModelAndView resolveException(HttpServletRequest request,
  4. HttpServletResponse response,
  5. Object handler,
  6. Exception ex) {
  7. System.out.println("异常处理器正在执行中");
  8. ModelAndView modelAndView = new ModelAndView();
  9. //定义异常现象出现后,反馈给用户查看的信息
  10. modelAndView.addObject("msg","出错啦! ");
  11. //定义异常现象出现后,反馈给用户查看的页面
  12. modelAndView.setViewName("error.jsp");
  13. return modelAndView;
  14. }
  15. }

注解开发异常处理器

在类上添加@ControllerAdvice注解

在方法上添加@ExceptionHandler实现异常分类管理

  1. @Component
  2. @ControllerAdvice
  3. public class ExceptionAdvice {
  4. @ExceptionHandler(Exception.class)
  5. @ResponseBody
  6. public String doOtherException(Exception ex){
  7. return "出错啦,请联系管理员! ";
  8. }
  9. }

异常处理解决方案

异常分类:

  • 业务异常
    • 发送对应消息传递给用户,提醒规范操作
  • 系统异常
    • 发送固定消息传递给用户
    • 发送特定消息给运维人员,提醒维护
    • 记录日志
  • 其他异常

    • 发送固定消息传递给用户
    • 发送特定消息给编程人员,提醒维护
    • 纳入预期范围内
    • 记录日志

      自定义异常

      格式:继承自RuntimeExctption,实现所有构造方法 ```java //自定义异常继承RuntimeException,覆盖父类所有的构造方法 public class BusinessException extends RuntimeException { public BusinessException() { }

    public BusinessException(String message) { super(message); }

    public BusinessException(String message, Throwable cause) { super(message, cause); }

    public BusinessException(Throwable cause) { super(cause); }

    public BusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } } ```