springboot 中全局異常處理器,就是把錯誤異常統一處理的方法;等價于Springmvc中的異常處理器。
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="width:500px;border:1px solid lightgray;margin:200px auto;padding:80px">
系統出現了異常,異常原因是:
${exception}
<br><br>
出現異常的位址是:
${url}
</div>
</body>
</html>
步驟五:測試
因為配置了熱部署,就不用重新開機了,重新整理頁面即可,效果圖如下: