使用全域性異常處理來處理校驗邏輯的思路很簡單,首先我們需要通過@controlleradvice註解定義乙個全域性異常的處理類,然後自定義乙個校驗異常,當我們在controller中校驗失敗時,直接丟擲該異常,這樣就可以達到校驗失敗返回錯誤資訊的目的了。@controlleradvice:類似於@component註解,可以指定乙個元件,這個元件主要用於增強@controller註解修飾的類的功能,比如說進行全域性異常處理。
@exceptionhandler:用來修飾全域性異常處理的方法,可以指定異常的型別。
/**
* 自定義api異常
* created by macro on 2020/2/27.
*/public
class
apiexception
extends
runtimeexception
public
apiexception
(string message)
public
apiexception
(throwable cause)
public
apiexception
(string message, throwable cause)
public ierrorcode geterrorcode()
}
/**
* 斷言處理類,用於丟擲各種api異常
* created by macro on 2020/2/27.
*/public
class
asserts
public
static
void
fail
(ierrorcode errorcode)
}
/**
* 全域性異常處理
* created by macro on 2020/2/27.
*/@controlleradvice
public
class
globalexceptionhandler
return commonresult.
failed
(e.getmessage()
);}}
/**
* 使用者優惠券管理controller
* created by macro on 2018/8/29.
*/@controller
@api
(tags =
"umsmembercouponcontroller"
, description =
"使用者優惠券管理")(
"/member/coupon"
)public
class
umsmembercouponcontroller
", method = requestmethod.post)
@responsebody
public commonresult add
(@pathvariable long couponid)
//改進後
@apioperation
("領取指定優惠券"
)(value =
"/add/"
, method = requestmethod.post)
@responsebody
public commonresult add
(@pathvariable long couponid)
}
/**
* 使用者優惠券管理service
* created by macro on 2018/8/29.
*/public
inte***ce
umsmembercouponservice
/**
* 會員優惠券管理service實現類
* created by macro on 2018/8/29.
*/@service
public
class
umsmembercouponserviceimpl
implements
umsmembercouponservice
if(coupon.
getcount()
<=0)
date now =
newdate()
;if(now.
before
(coupon.
getenabletime()
))//判斷使用者領取的優惠券數量是否超過限制
smscouponhistoryexample couponhistoryexample =
newsmscouponhistoryexample()
; couponhistoryexample.
createcriteria()
.andcouponidequalto
(couponid)
.andmemberidequalto
(currentmember.
getid()
);countbyexample
(couponhistoryexample);if
(count>=coupon.
getperlimit()
)//省略領取優惠券邏輯...
return commonresult.
success
(null,
"領取成功");
}//改進後
@override
public
void
add(long couponid)
if(coupon.
getcount()
<=0)
date now =
newdate()
;if(now.
before
(coupon.
getenabletime()
))//判斷使用者領取的優惠券數量是否超過限制
smscouponhistoryexample couponhistoryexample =
newsmscouponhistoryexample()
; couponhistoryexample.
createcriteria()
.andcouponidequalto
(couponid)
.andmemberidequalto
(currentmember.
getid()
);countbyexample
(couponhistoryexample);if
(count>=coupon.
getperlimit()
)//省略領取優惠券邏輯...
}}
SpringBoot處理全域性異常返回json字串
之所以要在專案中定義全域性異常捕獲,是因為直接異常資訊給前端是真的很不友好。首先,建立乙個commonexceptionhandler 類 自定義 在類頭加上 controlleradvice註解。description 公共異常處理類 author gary date 2019 03 22 23 ...
錯誤處理的返回 異常還是返回值
推薦使用異常 因為異常設計就是為了決解 什麼出了錯?在哪齣的錯?為什麼出錯?1.通過使用異常可以明確 錯誤的型別,錯誤的原因,錯誤出現的地方並且呼叫者強制處理,這提高程式的健壯性 robust 而返回值方式需要呼叫者主動去處理。2.使用異常可以使 更加優雅 可讀性提高。不用寫各種if else判斷情...
錯誤處理之函式返回值OR異常處理
問題 1 錯誤處理的方法有哪些?2 使用函式返回值還是丟擲異常?3 php 原框架下的異常處理機制是怎樣的?4 php yii框架下的錯誤處理方案是怎樣的?有什麼參考意義?如上所述四種處理方法,成員變數的方式多數使用在處理結果不用立即返回的情況,譬如對多個資料字段進行校驗返回校驗結果,使用場景比較明...