zoukankan      html  css  js  c++  java
  • SpringMVC异常处理

    异常处理思路:系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

    系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:

    springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。


    自定义异常类需要继承Exception:

     1 package cn.itcast.ssm.exception;
     2 
     3 public class CustomException extends Exception {
     4     
     5     //异常信息
     6     public String message;
     7     
     8     public CustomException(String message){
     9         super(message);
    10         this.message = message;
    11     }
    12 
    13     public String getMessage() {
    14         return message;
    15     }
    16 
    17     public void setMessage(String message) {
    18         this.message = message;
    19     }
    20     
    21     
    22 
    23 }
    View Code

    全局异常处理器:

    处理思路:

    解析出异常类型

    如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示

     如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)

    只要实现了HandlerExceptionResolver接口就是全局异常处理器

     1 package cn.itcast.ssm.exception;
     2 
     3 import javax.servlet.http.HttpServletRequest;
     4 import javax.servlet.http.HttpServletResponse;
     5 
     6 import org.springframework.web.servlet.HandlerExceptionResolver;
     7 import org.springframework.web.servlet.ModelAndView;
     8 
     9 public class CustomExceptionResolver implements HandlerExceptionResolver {
    10 
    11     /**
    12      * (非 Javadoc)
    13      * <p>Title: resolveException</p>
    14      * <p>Description: </p>
    15      * @param request
    16      * @param response
    17      * @param handler
    18      * @param ex 系统 抛出的异常
    19      * @return
    20      * @see org.springframework.web.servlet.HandlerExceptionResolver#resolveException(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, java.lang.Exception)
    21      */
    22     @Override
    23     public ModelAndView resolveException(HttpServletRequest request,
    24             HttpServletResponse response, Object handler, Exception ex) {
    25         //handler就是处理器适配器要执行Handler对象(只有method)
    26         
    27 //        解析出异常类型
    28 //        如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示
    29 //        String message = null;
    30 //        if(ex instanceof CustomException){
    31 //            message = ((CustomException)ex).getMessage();
    32 //        }else{
    33 ////            如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)
    34 //            message="未知错误";
    35 //        }
    36         
    37         //上边代码变为
    38         CustomException customException = null;
    39         if(ex instanceof CustomException){
    40             customException = (CustomException)ex;
    41         }else{
    42             customException = new CustomException("未知错误");
    43         }
    44         
    45         //错误信息
    46         String message = customException.getMessage();
    47         
    48         
    49         ModelAndView modelAndView = new ModelAndView();
    50         
    51         //将错误信息传到页面
    52         modelAndView.addObject("message", message);
    53         
    54         //指向错误页面
    55         modelAndView.setViewName("error");
    56 
    57         
    58         return modelAndView;
    59     }
    60 
    61 }
    View Code

     最后,在springmvc.xml配置全局异常处理器

  • 相关阅读:
    147
    UVA12230 过河 Crossing Rivers
    重聚
    网络流24题 P2762 太空飞行计划问题
    网络流24题 P2756 飞行员配对方案问题
    网络流24题
    洛谷 P3369 【模板】普通平衡树
    LOJ #6280. 数列分块入门 4
    LOJ #6279. 数列分块入门 3
    LOJ #6278. 数列分块入门 2
  • 原文地址:https://www.cnblogs.com/ustc-anmin/p/10494260.html
Copyright © 2011-2022 走看看