欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot框架的全局異常處理方案詳解

 更新時(shí)間:2021年03月12日 14:27:58   作者:一起隨緣  
這篇文章主要介紹了springboot框架的全局異常處理方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

系統(tǒng)框架搭建的前期過程中,為了約束代碼規(guī)范,我們會(huì)對(duì)一些通用功能做一些處理,比如聲明一些系統(tǒng)公用錯(cuò)誤類、封裝通用返回結(jié)果、統(tǒng)一異常處理等,這樣做的優(yōu)勢(shì)是團(tuán)隊(duì)開發(fā)過程中能夠形成統(tǒng)一的代碼規(guī)范,增強(qiáng)代碼可讀性,同時(shí)又便于后期代碼維護(hù)。本文主要介紹下框架中異常的處理:

1.聲明全局異常處理類,并添加@ControllerAdvice和@RestController注解
代碼如下:

@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
	
	private final Logger logger = Logger.getLogger(GlobalExceptionHandler.class);

	//空指針異常
  @ExceptionHandler(NullPointerException.class)
  public Map<String, Object> nullPointer(NullPointerException e,HttpServletRequest req){
    logger.error(e.getMessage());
		e.printStackTrace();
    return ResultObject.newResultObj(ErrorCode.NULLPOINTER);
  }
	
	//IO異常
	@ExceptionHandler(IOException.class,HttpServletRequest req, HttpServletResponse res)
  public Map<String, Object> IOException(IOException e){
  	 logger.error(e.getMessage());
		 e.printStackTrace();
     return ResultObject.newResultObj(ErrorCode.IOEXCEPTION);
  }
  
	
	//權(quán)限不足異常	
	@ExceptionHandler(UnauthorizedException.class)
	public Map<String, Object> unauth(HttpServletRequest req, HttpServletResponse res){
		return ResultObject.newResultObj(ErrorCode.UNAUTH);
	}
	
	//未登錄異常	
	@ExceptionHandler(AuthorizationException.class)
	public Map<String, Object> unlogin(HttpServletRequest req, HttpServletResponse res){
		return ResultObject.newResultObj(ErrorCode.NOTLOGIN);
	}
	
	//其它異常
	@ExceptionHandler(Exception.class)
	public Map<String, Object> error(Exception e,HttpServletRequest req, HttpServletResponse res){
		logger.error(e.getMessage());
		e.printStackTrace();
		return ResultObject.newResultObj(ErrorCode.SYSTEM);
	}
	
}

2.聲明系統(tǒng)通用錯(cuò)誤處理類

/**
 * 系統(tǒng)通用錯(cuò)誤處理類
 */
public class ErrorCode {

  //返回碼
  private int code = 0;
	
  //描述信息
  private String errmsg = "SUCCESS";
	
  //成功
  public static final ErrorCode SUCCESS 					  = new ErrorCode(0,"SUCCESS");
  public static final ErrorCode PARAMS 					  = new ErrorCode(100000,"參數(shù)錯(cuò)誤");
  public static final ErrorCode SYSTEM 					  = new ErrorCode(100001,"系統(tǒng)錯(cuò)誤");
	public static final ErrorCode UNLOGIN 					  = new ErrorCode(100002,"未登錄");
  public static final ErrorCode UNAUTH 					  = new ErrorCode(100003,"權(quán)限錯(cuò)誤");
	public static final ErrorCode NULLPOINTER 					= new ErrorCode(100004,"空指針錯(cuò)誤");
	public static final ErrorCode IOEXCEPTION 					= new ErrorCode(100005,"IO錯(cuò)誤");
  public static final ErrorCode UPLOAD_FAIL 					= new ErrorCode(100006,"文件上傳失敗");
  public static final ErrorCode REPEAT 					  = new ErrorCode(100007,"數(shù)據(jù)已存在");

  public ErrorCode() {}

  @Override
  public String toString() {
    return String.format("{\"errmsg\": \"%s\", \"code\": %d}", errmsg, code);
  }

  public int getCode() {
    return code;
  }

  public ErrorCode setCode(int code) {
    this.code = code;
    return this;
  }

  public String getErrmsg() {
    return errmsg;
  }

  public ErrorCode setErrmsg(String errmsg) {
    this.errmsg = errmsg;
    return this;
  }

  public ErrorCode(int code, String errmsg) {
    this.code = code;
    this.errmsg = errmsg;
  }

}

3.聲明全局異常處理類中的結(jié)果返回類

import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.xxx.ErrorCode;//此處引用自己errorCode類所在的包路徑
import org.json.JSONObject;

public class ResultObject {	
	
	/**
	 * 輸出錯(cuò)誤信息
	 * @param errorCode
	 */
	public static Map<String, Object> newResultObj(ErrorCode errorCode){
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", errorCode.getCode());
		obj.put("errmsg", errorCode.getErrmsg());
		return obj;
	}
	
	/**
	 * 輸出帶數(shù)據(jù)的成功信息
	 * @param data
	 */
	public static Map<String, Object> newResultObj(Object data){
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", ErrorCode.SUCCESS.getCode());
		obj.put("errmsg", ErrorCode.SUCCESS.getErrmsg());
		if(null != data){
			obj.put("data", data);
		}
		return obj;		
	}
	
	/**
	 * 輸出帶數(shù)據(jù)的錯(cuò)誤信息
	 * @param errorCode
	 * @param data
	 */
	public static Map<String, Object> newResultObj(ErrorCode errorCode, Object data){
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", errorCode.getCode());
		obj.put("errmsg", errorCode.getErrmsg());
		if(null != data){
			obj.put("data", data);
		}
		return obj;				
	}
	
	
	/**
	 * 輸出結(jié)果
	 */
	public static void outputResult(HttpServletResponse response, ErrorCode errorCode){
		try {
			JSONObject json = new JSONObject();
			json.put("code", errorCode.getCode());
			json.put("errmsg", errorCode.getErrmsg());
			
			response.setCharacterEncoding("UTF-8");
			response.setContentType("application/json;charset=UTF-8");
			response.getWriter().write(json.toString());
		} catch (Exception e1) {
		}
	}
}

到此這篇關(guān)于springboot框架的全局異常處理方案的文章就介紹到這了,更多相關(guān)springboot全局異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你在?Java?中實(shí)現(xiàn)?Dijkstra?最短路算法的方法

    教你在?Java?中實(shí)現(xiàn)?Dijkstra?最短路算法的方法

    這篇文章主要教你在?Java?中實(shí)現(xiàn)?Dijkstra?最短路算法的方法,在實(shí)現(xiàn)最短路算法之前需要先實(shí)現(xiàn)帶權(quán)有向圖,文章中給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • MybatisPlus代碼生成器使用示例

    MybatisPlus代碼生成器使用示例

    MyBatis-Plus自動(dòng)化的生成與數(shù)據(jù)庫(kù)表對(duì)應(yīng)的Java代碼文件,本文主要介紹了MybatisPlus代碼生成器使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • 使用GenericObjectPool避免泄漏設(shè)置方法

    使用GenericObjectPool避免泄漏設(shè)置方法

    這篇文章主要為大家介紹了使用GenericObjectPool避免泄漏的設(shè)置方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java實(shí)現(xiàn)按照大小寫字母順序排序的方法

    Java實(shí)現(xiàn)按照大小寫字母順序排序的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)按照大小寫字母順序排序的方法,涉及java數(shù)組遍歷、編碼轉(zhuǎn)換、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Java文檔注釋超詳細(xì)講解

    Java文檔注釋超詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于Java文檔注釋的相關(guān)資料,文檔注釋主要是用來生成java開發(fā)文檔javadoc的,生成的開發(fā)文檔和Java本身的API幫助文檔是一樣的,需要的朋友可以參考下
    2023-10-10
  • springboot如何獲取application.yml里值的方法

    springboot如何獲取application.yml里值的方法

    這篇文章主要介紹了springboot如何獲取application.yml里的值,文章圍繞主題相關(guān)自資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • Java8并發(fā)新特性CompletableFuture

    Java8并發(fā)新特性CompletableFuture

    這篇文章主要介紹了Java8并發(fā)新特性CompletableFuture,CompletableFuture針對(duì)Future接口做了改進(jìn),相比Callable/Runnable接口它支持多任務(wù)進(jìn)行鏈?zhǔn)秸{(diào)用、組合、多任務(wù)并發(fā)處理,下面文章更多相關(guān)內(nèi)容得介紹,需要的小伙伴可以參考一下
    2022-06-06
  • Springboot項(xiàng)目升級(jí)2.2.x升至2.7.x的示例代碼

    Springboot項(xiàng)目升級(jí)2.2.x升至2.7.x的示例代碼

    本文主要介紹了Springboot項(xiàng)目升級(jí)2.2.x升至2.7.x的示例代碼,會(huì)有很多的坑,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot自動(dòng)配置源碼深入刨析講解

    SpringBoot自動(dòng)配置源碼深入刨析講解

    這篇文章主要介紹了SpringBoot自動(dòng)配置原理分析,SpringBoot是我們經(jīng)常使用的框架,那么你能不能針對(duì)SpringBoot實(shí)現(xiàn)自動(dòng)配置做一個(gè)詳細(xì)的介紹。如果可以的話,能不能畫一下實(shí)現(xiàn)自動(dòng)配置的流程圖。牽扯到哪些關(guān)鍵類,以及哪些關(guān)鍵點(diǎn)
    2022-09-09
  • Java讀寫Excel實(shí)例分享

    Java讀寫Excel實(shí)例分享

    本文主要分享了Java讀寫Excel的實(shí)例代碼。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01

最新評(píng)論