Spring異常處理
無規(guī)則不成方圓,很多人知道這句話,但是做到的很少,因?yàn)殡S性,開發(fā)寫B(tài)UG實(shí)際中,經(jīng)常有這樣那樣的錯(cuò)誤,怎么把錯(cuò)誤統(tǒng)一起來,怎么收集一個(gè)錯(cuò)誤,這是最關(guān)鍵的,這里拋開日志的記錄,那些是單獨(dú)話題,這里我說如何優(yōu)雅的異常處理。優(yōu)雅是相對(duì)而言,我們這里要做的就是不那么嘍,就是不要控制器中出現(xiàn)大片的try..cach..這樣的語(yǔ)句,有的甚至說不控制不就可以了嗎?不控制更危險(xiǎn),因?yàn)椴豢刂齐S意顯示,有可能導(dǎo)致直接解散!
異常處理必備知識(shí):
@ControllerAdvice
這個(gè)其實(shí)看源碼就知道,他其實(shí)是@Compoent他在運(yùn)行的時(shí)候其實(shí)就會(huì)是一個(gè)Bean
@ExceptionHandler
通過這個(gè)注解的value屬性,我們能指定我們要攔截的異常,這里指定根方法,進(jìn)行所有異常的攔截,當(dāng)然也可以單獨(dú)攔截某一種異常,后邊我會(huì)講到
優(yōu)雅處理錯(cuò)誤步驟
①做一個(gè)美觀的錯(cuò)誤頁(yè)面
②添加一個(gè)ControllerAdvice控制器,用來攔截所有異常
③人為去制造一個(gè)錯(cuò)誤
做一個(gè)美觀的錯(cuò)誤頁(yè)面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>錯(cuò)誤顯示DEMO</title>
</head>
<body>
${erroMsg}
</body>
</html>
定義ControllerAdvice控制器
@ControllerAdvice
public class ExceptionDemo {
@ExceptionHandler(value = Exception.class)
public ModelAndView exception(Exception exception, WebRequest request) {
ModelAndView modelAndView = new ModelAndView("error");
modelAndView.addObject("erroMsg", exception.getMessage());
return modelAndView;
}
}
造一個(gè)錯(cuò)誤來測(cè)試
@Controller
public class DemoController {
@RequestMapping("/advice")
public String demo() throws IllegalAccessException {
throw new IllegalAccessException("sulwan");
}
}
測(cè)試效果
預(yù)覽這個(gè)地址,應(yīng)該就看見了我們自定義錯(cuò)誤消息顯示到頁(yè)面去了!