在所有的可能性,以響應返回給客戶端在REST服務,我已經看到了兩種可能性,看起來相當的:一個WebApplicationException
(可能使用Response
實例),或者返回Response
實例拋出。WebApplicationException VS響應
爲什麼在結果相同的情況下使用一種可能性?這是否與REST框架相關,該框架可能被配置爲在異常和常規響應之間做出不同反應?
在所有的可能性,以響應返回給客戶端在REST服務,我已經看到了兩種可能性,看起來相當的:一個WebApplicationException
(可能使用Response
實例),或者返回Response
實例拋出。WebApplicationException VS響應
爲什麼在結果相同的情況下使用一種可能性?這是否與REST框架相關,該框架可能被配置爲在異常和常規響應之間做出不同反應?
爲什麼在結果相同的情況下使用一種可能性?
也許是因爲作爲(Java)程序員,您習慣於在應用程序的特定規則被破壞時拋出異常?將一些字符串轉換爲數字,你可能會得到一個NumberFormatException
,在一個數組中使用一個錯誤的索引,並且你得到一個ArrayIndexOutOfBoundsException
,訪問你不允許的東西,並得到一個SecurityException
等等。你習慣於在「常規響應「無法創建(不是來自錯誤的輸入或某些處理錯誤)。
當您無法返回常規響應時,您必須向客戶端返回錯誤響應。您可以通過拋出異常或手動構建響應來做到這一點。這對你的客戶端來說是一樣的,但對你的服務器端代碼來說並不是一回事。
拋出異常讓你的代碼更清晰,更容易推理,從而更容易理解。我們的想法是對WebApplicationException
進行子分類並創建您自己的有意義的例外(例如ProductNotFoundException extends WebApplicationException { ... }
,AccessDeniedException extends WebApplicationException { ... }
或重複使用例外與exception mapper)。
它當時吸塵器throw new ProductNotFoundException()
或throw new AccessDeniedException()
,讓框架處理它,而不是每次都建立Response
,後來跟隨用於構建它搞清楚正在發生的事情的代碼部分的細節。
我將'WebApplicationException'看作失敗情況而不是成功案例。如果你有一個通常在成功案例中返回(說)一個JAXB對象的方法,那麼拋出一個'WebApplicationException'就提供了一種在失敗情況下返回其他類型數據的方法。但是如果方法被聲明在成功情況下返回'Response',那麼對異常方法的需求就會減少。 –
查看[Jersey文檔](http://jersey.java.net/nonav/documentation/latest/jax-rs.html#d4e435)瞭解'Response'與'WebApplicationException'的一些想法。爲獲得成功,請始終使用「響應」。 – 2012-11-13 14:40:20
@IanRoberts我明白一個人通常用於失敗,另一個用於成功場景。但是,我的問題更具有技術性,即如果框架是異常還是常規響應,框架是如何解釋或處理響應,那麼是否存在差異? (我添加了Jersey標籤)。 –