在開發過程中,我們會遇到很多的異常,比方說:500,如果直接返回給用戶,則顯得很low,此時我們就需要捕獲異常
先舉個下例子:
1)簡單異常的捕獲
public class ErrorController {
//一般情況下初學者都會用try-catch來進行簡單的異常捕獲,如下所示
// 1)一般情況下
public String testError(int a) {
int b = 0 ;
try {
b=1/a;
} catch (Exception e) {
return "系統錯誤";
}
return "success"+b;
}
}
注:由於開發過程中有較多的方法,如果按照此方法來捕獲異常則較爲繁瑣,因此引入全局捕獲異常
2)全局異常捕獲
全局捕獲異常的原理:使用AOP切面技術
用@RequestBody,@ResponseBody,就解決了JSon自動綁定。接着就發現,如果遇到RuntimeException,需要給出一個默認返回JSON。
(1)創建一個utils工具類,來捕獲全局異常
package com.demo.utils;
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 全局捕獲異常
* 原理:使用AOP切面技術
* 捕捉返回json串
* @author hzz
*/
@ControllerAdvice(basePackages="com.demo.controller")
public class ErrorUtil {
//統一異常處理@ExceptionHandler,主要用於RuntimeException
@ExceptionHandler(RuntimeException.class)
@ResponseBody//返回json串
public Map<String, Object> errorResoult(){
Map<String, Object> errorMap= new HashMap<String, Object>();
errorMap.put("errorCode", "500");
errorMap.put("errorMsg", "系統錯誤");
return errorMap;
}
}
(2)控制層代碼
package com.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 全局捕獲異常例子
* @author hzz
*
*/
@RestController
public class ErrorController {
//2)全局捕獲異常
@RequestMapping("/test-error")
public String testError(int a) {
int b = 1/a;
return "success"+b;
}
}
這就是簡單的全局捕獲異常,實際開發中還需要log日誌的打印,後期我將會繼續更新,由於博主剛入Java坑不久,難免有些錯誤,請大家批評,共同提高。