JRuby,Sinatra,Warbler app - HTTP PATCH请求失败,501错误

时间:2013-12-10 19:48:19

标签: sinatra jruby warbler http-patch

我使用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请求失败,如何让它们使用此设置?

1 个答案:

答案 0 :(得分:1)

根据Tomcat documentation HttpServlet只能处理GET,POST,PUT,DELETE请求

  

公共抽象类HttpServlet   扩展GenericServlet

     

提供要创建HTTP servlet的子类的抽象类   适合网站。 HttpServlet的子类必须覆盖at   至少一种方法,通常是其中之一:

     

doGet,如果servlet支持HTTP GET请求doPost,则为HTTP POST   请求doPut,用于HTTP PUT请求doDelete,用于HTTP DELETE   请求

但你可以发现这很有用:

  

如果您使用的HTTP库不允许覆盖或设置   任意HTTP方法名称,您可以发送POST请求并提供   通过查询字符串参数覆盖HTTP方法   _HttpMethod。

例如,要更新帐户,这将适用于实际的POST请求:

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