任何業(yè)務(wù)系統(tǒng)都有可能發(fā)生異常的場(chǎng)景父叙,通過(guò)配置全局異常神郊,可以制定統(tǒng)一的異常頁(yè)面或者錯(cuò)誤碼,從而提高用戶(hù)的體驗(yàn)度趾唱。
1 Springboot配置全局異常
- 類(lèi)添加注解
@ControllerAdvice涌乳,如果需要返回json數(shù)據(jù),則?法需要加@ResponseBody
@RestControllerAdvice, 默認(rèn)返回json數(shù)據(jù)甜癞,?法不需要加@ResponseBody - ?法添加處理器
捕獲全局異常,處理所有不可知的異常
@ExceptionHandler(value=Exception.class)
示例演示:
1.1 創(chuàng)建controller同級(jí)包handler
1.2 在handler包下創(chuàng)建異常處理類(lèi):CustomExceptionHandler
@RestControllerAdvice # 此注解表明該類(lèi)為異常處理類(lèi)
public class CustomExceptionHandler {
@ExceptionHandler(value = Exception.class) # 針對(duì)異常的處理方法
RetData handlerException(Exception e, HttpServletRequest request) {
// 定義全局異常標(biāo)識(shí)
String errMsgPrefix = "服務(wù)器異常錯(cuò)誤: ";
return RetData.RetError(-2, errMsgPrefix + e.getMessage());
}
}
1.3 編寫(xiě)測(cè)試代碼測(cè)試
@RequestMapping("list")
public Object getList() {
Map<String, String> map = new HashMap<>();
int i = 1 / 0; # 制造異常
map.put("1", "jackyan");
map.put("2", "daisy");
return map;
}
1.4 訪問(wèn)接口結(jié)果輸出:
{
"code": -2,
"data": null,
"message": "服務(wù)器異常錯(cuò)誤: / by zero"
}