0

我正在使用sitebricks 使用4 个http 方法get、post、put 和delete 实现一个简单的rest 服务。尝试使用 WebClient 向定义的服务发送删除请求,我得到 405 响应。有谁知道我为什么会得到这样的回应?

10:22:24.840 [5907955@qtp-6711891-2 - /r/clients/123] 调试 org.mortbay.log - 响应 /r/clients/123 405

这就是我使用网络客户端的方式

 WebClient client = web().clientOf(delete(123)).transports(String.class).over(Json.class);
    client.delete();

这是我的删除方法

 @Delete
  @At("/:id")
  public Reply delete(@Named("id") String id) {
    clientsRepository.delete(id);
    return Reply.saying().ok();
  }

我正在使用码头服务器。

4

2 回答 2

1

响应代码 405 表示某些内容被配置为不允许使用 http DELETE 方法。

我不能代表 sitebricks 本身,但 servlet 规范允许您禁用特定方法。

您的web.xmlwebapp 或 的${jetty.home}/etc/webdefault.xml,都可以配置为禁止使用特定的 HTTP 方法(如 TRACE、PUT、DELETE)。

检查那些<security-constraints>可能有<http-method>DELETE 声明的文件。

另请注意,任何代码都可以触发 405 响应本身。由于您在 Sitebricks 中看到了这一点,<filter>因此您的 web.xml 中的 a 可能会阻止它。

于 2013-01-02T23:34:25.857 回答
1

您是否正确构建了请求 URI?如果没有处理程序方法,Sitebricks 返回 405。此测试用例验证 @Delete 确实可以正常工作:

https://github.com/dhanji/sitebricks/blob/master/sitebricks-acceptance-tests/src/main/java/com/google/sitebricks/example/RestfulWebServiceWithSubpaths2.java

正如 joakime 所说,请检查是否有任何其他过滤器或处理程序在 Sitebricks 之外触发。

于 2013-01-03T04:24:09.557 回答