2

我使用 JRuby 1.7.4、Sinatra 1.4.4 和 Rack 1.5.2 创建了一个简单的 Web 服务。此 Web 服务使用简单的消息“Hello world using [request-type]”响应 GET、POST、PATCH 和 DELETE 请求。

我启动了 Rack 并测试了所有的请求类型。四个人都工作了。

我使用 Warbler 创建应用程序的 war 文件并将其部署到 Tomcat 7.0.47。当我使用 Tomcat PATCH 进行测试时,出现“HTTP 状态 501 - 此 servlet 未针对此 URI 实现方法 PATCH”。(是的,'不是'重复。但这是我从 Tomcat 得到的响应。) GET、POST 和 DELETE 工作正常。

然后我尝试使用 Jetty 9.1.0。结果相同。GET、POST 和 DELETE 工作,但 PATCH 失败。

为什么 PATCH 请求失败,我如何让它们使用此设置?

4

1 回答 1

1

根据Tomcat 文档,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 请求并通过查询字符串参数 _HttpMethod 为 HTTP 方法提供覆盖。

例如,要更新帐户,这将与实际的 POST 请求一起使用:

.../services/data/v23.0/sobjects/Account/0016000000eEhmxAAC?_HttpMethod=PATCH
于 2013-12-11T08:02:12.017 回答