SpringMVC中怎么统一异常处理-创新互联

SpringMVC中怎么统一异常处理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

为周至等地区用户提供了全套网页设计制作服务,及周至网站建设行业解决方案。主营业务为网站制作、成都网站制作、周至网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

一、需求

  • 一般项目中都需要作异常处理,基于系统架构的设计考虑,使用统一的异常处理方法。

  • 系统中异常类型有哪些?

  • 包括预期可能发生的异常、运行时异常(RuntimeException),运行时异常不是预期会发生的。

  • 针对预期可能发生的异常,在代码手动处理异常可以try/catch捕获,可以向上抛出。

  • 针对运行时异常,只能通过规范代码质量、在系统测试时详细测试等排除运行时异常。

二、统一异常处理解决方案

2.1 定义异常

针对预期可能发生的异常,定义很多异常类型,这些异常类型通常继承于Exception。

这里定义一个系统自定义异常类:

CustomException,用于测试。

public class CustomException extends Exception {
  
  //异常信息
  private String message;
  
  public CustomException(String message){
    super(message);
    this.message = message;
    
  }
  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }
  
}

2.2 异常处理

要在一个统一异常处理的类中要处理系统抛出的所有异常,根据异常类型来处理。

统一异常处理的类是什么?

前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常,进行异常处理。

在系统中自定义统一的异常处理器,写系统自己的异常处理代码。

统一异常处理器实现HandlerExceptionResolver接口。

public class CustomExceptionResolver implements HandlerExceptionResolver {

  //前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常就会执行此方法
  //handler最终要执行的Handler,它的真实身份是HandlerMethod
  //Exception ex就是接收到异常信息
  @Override
  public ModelAndView resolveException(HttpServletRequest request,
      HttpServletResponse response, Object handler, Exception ex) {
    //输出异常
    ex.printStackTrace();
    
    //统一异常处理代码
    //针对系统自定义的CustomException异常,就可以直接从异常类中获取异常信息,将异常处理在错误页面展示
    //异常信息
    String message = null;
    CustomException customException = null;
    //如果ex是系统 自定义的异常,直接取出异常信息
    if(ex instanceof CustomException){
      customException = (CustomException)ex;
    }else{
      //针对非CustomException异常,对这类重新构造成一个CustomException,异常信息为“未知错误”
      customException = new CustomException("未知错误");
    }
    
    //错误 信息
    message = customException.getMessage();
    
    request.setAttribute("message", message);

    
    try {
      //转向到错误 页面
      request.getRequestDispatcher("/WEB-INF/jsp/error.jsp").forward(request, response);
    } catch (ServletException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
    return new ModelAndView();
  }

}

2.3 配置统一异常处理器


  

2.4 异常处理逻辑

  • 根据不同的异常类型进行异常处理。

  • 系统自定义的异常类是CustomException ,在controller方法中、service方法中手动抛出此类异常。

  • 针对系统自定义的CustomException异常,就可以直接从异常类中获取异常信息,将异常处理在错误页面展示。

  • 针对非CustomException异常,对这类重新构造成一个CustomException,异常信息为“未知错误”,此类错误需要在系统测试阶段去排除。

  • 在统一异常处理器CustomExceptionResolver中实现上边的逻辑。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联网站建设公司行业资讯频道,感谢您对创新互联建站的支持。

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、建站服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:SpringMVC中怎么统一异常处理-创新互联
网页地址:http://pwwzsj.com/article/pipio.html