全域性異常處理 springBoot 全域性異常處理

2021-10-25 12:30:22 字數 2001 閱讀 4404

先讚後看,月入百萬

springboot開發的web專案中,強調分層的概念,乙個完整的專案一般會劃分出controller層和service層。

因此,為了**的可維護性,controller層**應該盡量簡潔,驗證一下引數,直接丟給service層處理即可

異常處理的方式無外乎兩種:

springboot的web專案中可以採用全域性異常處理的方式:

具體實現

自定義異常:

public enum exceptiontype     exceptiontype(int code,level level)    public int getcode()}
@data@allargsconstructor@noargsconstructorpublic class serviceexception extends exception
自定義errorvocommonjsonresponse,這兩個類定義了當出現異常時,返回給呼叫方的json資料格式:

controller層寫乙個全域性異常處理類,幾個關鍵點:

@restcontroller@controlleradvice@slf4jpublic class customizedexceptionhandler extends responseentityexceptionhandler         else if(extype==exceptiontype.illegal_param)else     }    @override    public responseentityhandlemethodargumentnotvalid(            methodargumentnotvalidexception ex, httpheaders headers, httpstatus status, webrequest request)         }        errorvo errordetails = new errorvo(new date(), request.getparametermap(),                request.getdescription(false));        commonjsonresponseresponse = new commonjsonresponse<>(httpstatus.bad_request.value(),                exceptiontype.illegal_param.getcode(), message);        response.setdata(errordetails);        return new responseentity<>(response, httpstatus.bad_request);    }}
controller層在檢驗引數時加上@validated註解,這樣在校驗引數失敗時,會呼叫全域性異常處理類中的handlemethodargumentnotvalid方法

service層方法就是列印異常日誌並向上丟擲serviceexception異常:

@service@slf4jpublic class myservice catch (exception e)    }}
最後的效果圖:

引數非法時:

引數合法但service層出現異常時:

全域性異常處理

3 丟擲異常類的使用 處理 介面無權訪問異常accessdeniedexception param e return exceptionhandler accessdeniedexception.class public responseentity handleaccessdeniedexcept...

struts 異常處理 全域性異常處理

記錄一下全域性異常處理的過程 處理主動丟擲的異常,轉向錯誤提示頁面。1 寫乙個自己的異常,繼承runtimeexception,從父類生成構造方法 package me.yndy.srtp.exception suppresswarnings serial public class errorexc...

dubbo全域性異常處理 dubbo異常處理

dubbo異常處理 我們的專案使用了dubbo進行不同系統之間的呼叫。每個專案都有乙個全域性的異常處理,對於業務異常,我們會拋出自定義的業務異常 繼承runtimeexception 全域性的異常處理會根據不同的異常型別進行不同的處理。最近我們發現,某個系統呼叫dubbo請求,provider端 服...