Spring異常處理
無(wú)規(guī)則不成方圓难审,很多人知道這句話瘫拣,但是做到的很少,因?yàn)殡S性告喊,開(kāi)發(fā)寫(xiě)B(tài)UG實(shí)際中麸拄,經(jīng)常有這樣那樣的錯(cuò)誤,怎么把錯(cuò)誤統(tǒng)一起來(lái)葱绒,怎么收集一個(gè)錯(cuò)誤感帅,這是最關(guān)鍵的,這里拋開(kāi)日志的記錄地淀,那些是單獨(dú)話題失球,這里我說(shuō)如何優(yōu)雅的異常處理。優(yōu)雅是相對(duì)而言,我們這里要做的就是不那么嘍实苞,就是不要控制器中出現(xiàn)大片的try..cach..這樣的語(yǔ)句
豺撑,有的甚至說(shuō)不控制不就可以了嗎?不控制更危險(xiǎn)黔牵,因?yàn)椴豢刂齐S意顯示聪轿,有可能導(dǎo)致直接解散!
異常處理必備知識(shí):
@ControllerAdvice
這個(gè)其實(shí)看源碼就知道猾浦,他其實(shí)是@Compoent
他在運(yùn)行的時(shí)候其實(shí)就會(huì)是一個(gè)Bean
@ExceptionHandler
通過(guò)這個(gè)注解的value屬性陆错,我們能指定我們要攔截的異常,這里指定根方法金赦,進(jìn)行所有異常的攔截音瓷,當(dāng)然也可以單獨(dú)攔截某一種異常,后邊我會(huì)講到
優(yōu)雅處理錯(cuò)誤步驟
①做一個(gè)美觀的錯(cuò)誤頁(yè)面
②添加一個(gè)ControllerAdvice控制器夹抗,用來(lái)攔截所有異常
③人為去制造一個(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ò)誤來(lái)測(cè)試
@Controller
public class DemoController {
@RequestMapping("/advice")
public String demo() throws IllegalAccessException {
throw new IllegalAccessException("sulwan");
}
}
測(cè)試效果
預(yù)覽這個(gè)地址绳慎,應(yīng)該就看見(jiàn)了我們自定義錯(cuò)誤消息顯示到頁(yè)面去了!