2013-12-13 44 views
0

我使用Spring 3.2 MVC/Tomcat 7.4/PostgreSQL編寫的簡單REST API原型。REST - 如何處理不必要的請求?

現在我想的是解決這些問題的最佳途徑:

  1. 有人做出一個資源請求不存在
  2. 有人做出資源的請求,但使用不支持HTTP方法
  3. 有人做出一個資源的請求,但提供不正確或不完整的數據

問題3我可能與檢查數據和響應適當HTTP老天解決ders(HTTP 400或HTTP 404,因爲由於某些輸入數據丟失而無法找到數據),但我不知道如何解決(在Spring中)問題1和2.

什麼是處理這些例外嗎?

回答

1

對於問題1只返回404錯誤。

創建404例外:

@ResponseStatus(value = HttpStatus.NOT_FOUND) 
public class ResourceNotFoundException extends RuntimeException { 

} 

現在拋出任何處理程序和客戶端將得到一個404錯誤。

對於問題2如果您正確設置了過濾器,或者如果不生成併發送405不允許的代碼,框架將自動生成並返回錯誤頁面。

對於問題3以與問題1相同的方式返回400錯誤語法錯誤 - 或者生成更復雜的錯誤返回,詳細說明問題。

+0

謝謝,如何解決在Spring中以編程方式捕獲這些異常?有什麼方法可以通過一些全球性的trycatch類來捕捉它嗎? – user2148736

+0

你不抓住他們,你扔他們。如果他們請求不存在的東西拋出ResourceNotFoundException。 Spring會檢測到這一點,讀取註釋,並生成一個合適的404錯誤和頁面。 –

+0

是的,我理解你。你認爲我沒有責任去捕獲從我的API拋出的異常,並讓Tomcat自行解決它嗎? – user2148736

1
  1. 返回404(未找到)
  2. 返回405(不允許的方法)
  3. 返回400(錯誤請求)

一句忠告,身體/ 404頭,你當有人請求一個不存在的URL路徑時,返回時應該與不存在資源時不同。這將允許您的客戶弄清楚他們是否調用了錯誤的URL或資源不存在。