[英]is it correct to throw an exception when resource not found
找不到請求的資源時在服務器端引發異常是否可以?
客戶端收到未找到的404。 我擔心的是,在這種情況下在服務器端拋出異常是否正常。
很難假設您要對添加到問題中的詳細信息級別進行處理。
但是,如果您正確地處理了異常,則該方法可能沒有任何問題。 看看一些框架使用的方法:
您可以拋出一個WebApplicationException
,它將被映射為一個響應。 您可以定義自己的WebApplicationException
子類或使用現有的子類。 例如, NotFoundException
將被映射到帶有404
狀態代碼的響應。 有關現有異常的更多詳細信息,請參閱此答案 。
您還可以創建自己的ExceptionMapper
以將任何異常映射到所需的響應。
您可以使用@ResponseStatus
注釋異常類, @ResponseStatus
將異常映射到響應。
它還使您可以實現HandlerExceptionResolver
或擴展現有的實現之一,例如AbstractHandlerExceptionResolver
。
另一種方法是使用帶有@ControllerAdvice
注釋的ResponseEntityExceptionHandler
並通過使用@ExceptionHandler
注釋已實現的方法來定義處理的異常
基本上,拋出保留的異常狀態碼不是理想的。 您應該在內部處理此異常,並准備自己的代碼,以使客戶端知道實際問題的完整信息就可以了。
從語義的角度來看:如果條件使得條件不可恢復,則應引發異常,並且必須通知開發人員。
服務器無法在會話開始時解析身份驗證請求-這是非常嚴重的情況,適當的例外是。
用戶未填寫必填字段,而是嘗試發送表格。 此問題可以解決,但例外可能是不良的設計。
我會說添加一個過濾器以捕獲404並添加有關404詳細信息的自定義信息。
在純REST實施的情況下,任何缺少資源ID和格式錯誤的URL都將返回404。就REST合同而言,兩種情況都正確,具有404響應。 但是有關缺少哪種類型資源的更多詳細信息將有助於使用它的客戶端進行適當的操作。
相關討論: 找不到剩余資源時返回404
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.