使用删除方法时,为什么sitebricks响应为405状态?

时间:2012-12-27 08:27:18

标签: http servlets jetty sitebricks

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

10:22:24.840 [5907955 @ qtp-6711891-2 - / r / clients / 123] DEBUG org.mortbay.log - RESPONSE / 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();
  }

我正在使用Jetty Server。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分: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外部发射。