我正在使用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。
答案 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确实正常工作:
正如joakime所说,请检查是否有任何其他过滤器或处理程序在Sitebricks外部发射。