統一異常處理@ExceptionHandler

在開發過程中,我們會遇到很多的異常,比方說: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坑不久,難免有些錯誤,請大家批評,共同提高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章