SpringMVC基础-异常处理(Expection)

第一步:自定义异常类(继承java中的Exception类)

/**
 * 自定义异常
 */
public class SysException extends Exception{

  /**
   * 异常提示
   */
  private String message;

  public String getMessage() {
    return message;
  }

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

  public SysException(String message) {
    this.message = message;
  }
}

第二步:新建异常处理类(实现SpringMvc中的HandlerExceptionResolver接口)

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 异常处理
 */
public class ExceptionResover implements HandlerExceptionResolver {
  @Override
  public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
    SysException ex = null;
    if (e instanceof SysException) {
      ex = (SysException) e;
    } else {
      ex = new SysException("系统正在维护升级,详情请联系管理员");
    }
    // 跳转异常页面
    ModelAndView mv = new ModelAndView();
    mv.addObject("message", ex.getMessage());
    mv.setViewName("excption");
    return mv;
  }
}

第三步:在Spring的配置文件中注册异常处理类

 <!-- 配置异常处理 -->
 <bean id="sysException" class="work.chenc.exception.ExceptionResover"></bean>

第四步:新增异常时需要跳转的页面

第五步:手动模拟异常进行测试(新增一个类)

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import work.chenc.exception.SysException;

@Controller
public class TestExceptController {

  @RequestMapping(value = "/testException")
  public String testException() throws SysException {
    System.out.println("testException----------");
    try {
      int a = 10/0;
    } catch (Exception e) {
      e.printStackTrace();
      throw new SysException("未知错误");
    }
    return "success";
  }
}

总结:在实际开发中无论是持久层(Da0)还是业务层(service)出现异常时我们都是将异常进行抛出,然后在控制层我们对异常捕获。在SpringMVC中我们可以一直将异常抛出,直至抛给SpringMVC的前端控制器(DispatcherServlet)在这里进行异常处理,因为DispatcherServlet相当于一个调度中心,浏览器所有的及服务端的数据返回都是要经过DispatcherServlet

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容