Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法。等价于Springmvc中的异常处理器。
步骤一:基于前面的springBoot入门小demo修改
步骤二:修改HelloController类
修改HelloController,使得访问/hello一定会产生异常: some exception
package cn.xdf.springboot.web; import java.text.DateFormat; import java.util.Date; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloController { @RequestMapping("/hello") public String hello(Model m) throws Exception{ m.addAttribute("now",DateFormat.getDateTimeInstance().format(new Date())); if (true) { //制造必然异常 throw new Exception("some exception 异常内容!"); } return "hello"; //视图重定向hello.jsp } }
步骤三:创建全局异常处理器类GlobalExceptionHandler
新增加一个类GlobalExceptionHandler,用于捕捉Exception异常以及其子类。
捕捉到之后,把异常信息,发出异常的地址放进ModelAndView里,然后跳转到 errorPage.jsp
package cn.xdf.springboot.exception; import javax.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; @ControllerAdvice //@ControllerAdvice 该注解定义全局异常处理类 public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class) //@ExceptionHandler 该注解声明异常处理方法 public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception { ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); //异常内容(页面展示) mav.addObject("url", req.getRequestURL()); //请求的url地址(页面展示) mav.setViewName("errorPage"); //设置视图名称 return mav; } }
步骤四:创建errorPage.jsp
errorPage.jsp 格式化一下,稍微好看点显示这些异常信息
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>系统故障</title> </head> <body> <div style="500px;border:1px solid lightgray;margin:200px auto;padding:80px"> 系统出现了异常,异常原因是: ${exception} <br><br> 出现异常的地址是: ${url} </div>
</body> </html>
步骤五:测试
因为配置了热部署,就不用重启了,刷新页面即可,效果图如下: