2013-12-10 36 views
2

我已經使用JRuby 1.7.4,Sinatra 1.4.4和Rack 1.5.2創建了一個簡單的Web服務。該Web服務通過一條簡單的消息「使用[請求類型]的Hello World」響應GET,POST,PATCH和DELETE請求。JRuby,Sinatra,Warbler應用程序 - HTTP PATCH請求失敗,出現501錯誤

我開始Rack並測試所有的請求類型。所有四個工作。

我用Warbler創建應用程序的war文件並將其部署到Tomcat 7.0.47。當我用Tomcat PATCH進行測試失敗時出現「HTTP狀態501 - 方法PATCH不是由此servlet實現的URI」。 (是的,'不'是重複的,但是這是我從Tomcat獲得的響應。)GET,POST和DELETE工作正常。

然後我嘗試使用Jetty 9.1.0。同樣的結果。 GET,POST和DELETE工作但PATCH失敗。

爲什麼PATCH請求失敗,我如何讓他們使用此設置?

回答

1

根據Tomcat documentation的HttpServlet只能處理GET,POST,PUT,DELETE請求

公共抽象類的HttpServlet 擴展GenericServlet類

提供了一個抽象類,子類來創建一個HTTP Servlet中 合適爲一個網站。的HttpServlet的子類必須在 至少一種方法,通常是這些中的一個覆蓋:

的doGet,如果servlet支持HTTP GET請求的doPost,對於HTTP POST 請求doPut,用於HTTP PUT請求doDelete,對於HTTP DELETE 請求

但是你可以發現這很有用:

如果您使用的HTTP庫,不允許覆蓋或設置 任意HTTP方法的名稱,你可以發送POST請求和p通過查詢字符串參數 _HttpMethod覆蓋HTTP方法 。

例如,要更新帳戶,這將有一個實際的POST請求的工作:

.../services/data/v23.0/sobjects/Account/0016000000eEhmxAAC?_HttpMethod=PATCH 
+0

類似的建議被做了朋友。但是,我不控制傳入的請求,也不能修改它們。 –

相關問題