java統一異常處理

2021-09-21 18:03:34 字數 2820 閱讀 7307

我之前做過乙個專案,採用的是前端和後端分離,某些時候後台出現了異常,直接給前端拋了乙個500錯誤,這種錯誤會被使用者看到非常不友好,於是就有了以下統一異常處理,就是把所有的異常都經過處理,按照前端可讀的格式返回。

一、對比返回結果如下

1.沒有做統一異常處理前,後台出現異常返回結果如下圖

2.做了統一異常處理,後台出現異常返回的結果如下圖

總結:1.沒有對出現的異常做處理,讓預設丟擲500錯誤,前端處理麻煩、且對使用者不友好

2.對出現的異常做了統一的格式處理,並封裝成固定格式、前端處理簡單、提示訊息友好

二、具體實現步驟

1.之前處理工程異常,**中最常見的就是try-catch-finally,有時乙個try,多個catch,覆蓋了核心業務邏輯,現在使用

demo**如下

/**

* @auther: mzl

* @date: 2019/4/11 10:24

* @description:

*/@controlleradvice

@restcontroller

public class commonexceptionhandler

return result.defeatedresultbymsg(e.tostring());

}/**

* 攔截自定義異常

* @param ex

* @return

*/@exceptionhandler(baseexception.class)

@responsebody

public string exceptionhandler(baseexception ex)

return result.defeatedresultbycodeandmsg(ex.getcode(),ex.getmsg());}}

2.自定義乙個異常

/**

* @auther: mzl

* @date: 2019/4/10 18:02

* @description: 異常處理

*/public class baseexception extends runtimeexception

/*** 自定義異常

* @param code

* @param massge

*/public baseexception(integer code,string massge)

public baseexception()

public integer getcode()

public void setcode(integer code)

public string getmsg()

public void setmsg(string msg)

}

3.返回結果封裝

public class result 

public static string succeedresultbymsg( string msg)

public static string succeedresult()

public static string defeatedresultbymsg(string msg)

public static string defeatedresult()

public static string nologinresult()

public static string noauthorityresult()

public static string noauthorityresultbymsg(string msg)

public static string errorparameterresult(string 引數錯誤)

public static string errorparameterresultbymsg(string msg)

public static string defeatedresultbycodeandmsg(integer code,string msg)

public static string setresultbycodeandmsganddate(integer code,string msg, object date)

public static string getresult(consequence consequence)

}/**

* @auther: mzl

* @date: 2019/4/11 13:56

* @description:結果返回封裝工具

*/public class consequence

public void setcode(integer code)

public string getmsg()

public void setmsg(string msg)

public object getdate()

public void setdate(object date)

public string getdevmsg()

public void setdevmsg(string devmsg)

public void clear()

}

到此關鍵**基本完成,demo比較簡陋,僅供參

統一異常處理

為什麼需要做統一異常處理 因為如果不做統一處理,返回與前端的資料會非常亂,前端不好處理 並且不做統一處理,controller層就要寫很多的重複 統一格式 實現步驟 新建result物件 也就是請求返回的整體物件,包括code,msg,data public class result public ...

統一異常處理

1,建立統一異常處理類package com.xindong.common.handler 統一異常處理類 controlleradvice public class globalexceptionhandler exceptionhandler badsqlgrammarexception.cla...

統一異常處理

controlleradvice 用於捕獲全域性異常 exceptionhandler 傳入指定異常類 controlleradvice public class globalexceptionhandler 指定什麼異常執行該方法 exception 所有異常 exceptionhandler a...