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