[英]Modelling exceptions & Handling http codes inside a server application
我正在開發一個 spring 啟動應用程序,它使 http 調用多個外部服務,聚合並將響應返回到前端。
這是我項目的當前結構:
RouteController -> Handler -> ServiceLayer
注意- 此應用程序將始終發送 Http 200 響應,除非所有服務調用都失敗。
Spring異常處理我在這里尋找的是應用程序內部的異常處理。
我正在嘗試在此服務中添加異常處理,並且似乎沒有明確簡潔的規則。
這是我為任何依賴失敗創建的自定義異常 -
class DependencyException : RuntimeException {
constructor() : super()
constructor(message: String?) : super(message)
constructor(cause: Exception?) : super(cause)
constructor(message: String?, cause: Exception?) : super(message, cause)
}
這是調用 UserService 的服務層中的代碼 -
fun getUsers(): List<User>? {
logger.info { "entered: getUsers " }
val response = userControllerApiClient.getUsers()
when (response.statusCode.is2xxSuccessful) {
true -> return response.body?.users
false -> throw DependencyException()
}
}
已使用org.springframework.http
庫進行 http 調用。
有幾個問題我找不到明確的答案——
您好,您的問題:
這取決於您的業務邏輯,例如您有一個服務層來更新用戶,您應該通過 ID 找到它,如果找不到用戶,您應該拋出異常
如果您使用 spring-boot 是一個框架,為您提供現成的庫和 APIS 來處理所有您可以查看此鏈接https://www.baeldung.com/exception-handling-for-rest-with-spring
是的; 因為controller負責處理Http的異常,業務層的service
我沒看懂這個問題
不需要,建議返回 Http 錯誤代碼和自定義消息,以便客戶端了解異常錯誤原因
我推薦遵循 jhiptser spring 引導項目結構, https://www.jhipster.tech/managing-server-errors/
服務何時應該編寫自己的異常? 每當標准庫中的現有異常不涵蓋您的用例時,或者當您想在異常中添加更多詳細信息時。
何時使用 kotlin/java 標准庫現有異常? 同上,不要試圖重新發明輪子。 比如,使用 IllegalArgumentException 而不是創建您自己的 InvalidRequestException。 看看這里 - https://programming.guide/java/list-of-java-exceptions.html
這里有一些資源我認為你應該看看 -
https://itnext.io/graceful-error-handling-in-rest-driven-web-applications-d4209b4937aa
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.