Camel DELETE方法不支持Content-Type?

时间:2014-03-28 14:13:44

标签: java apache-camel

如何在Camel DELETE方法中发送内容类型。我添加了以下方式,但它无法正常工作。

from("direct:start")
.setHeader(Exchange.HTTP_METHOD, simple("DELETE"))
.setHeader(Exchange.CONTENT_TYPE, simple("application/xml")) 
.setHeader(Exchange.HTTP_URI, simple("http://02.02.02.02:8080/rest/delete/student/688187"))
.to("http://emptyhost");

您能帮我解决一下这个问题吗?

3 个答案:

答案 0 :(得分:1)

在删除操作中,不会发送任何内容,因此不需要Exchange.CONTENT_TYPE属性。

请尝试

from("direct:start")
    .setHeader(Exchange.HTTP_METHOD, simple("DELETE"))
    .to("http://02.02.02.02:8080/rest/delete/student/688187");

from("direct:start")
    .to("restlet:http://02.02.02.02:8080/rest/delete/student/688187?restletMethod=delete");

顺便说一下,在URL中使用delete不是RESTful方式,应该是ommited。

修改

Camel不会将正文转移到DELETE操作的请求,可以看到挖掘源代码。请改用PUT操作。 查看我对您的其他SO的回答。

答案 1 :(得分:0)

正如此post所提到的,如果在HTTP方法中删除了请求方法,骆驼可以处理正文。

http4组件中的骆驼版本2.19.0,带有deleteWithBody选项。我们可以将其添加到URL并将http方法用作DELETE

答案 2 :(得分:0)

默认情况下,Apache骆驼通过带有查询参数“ deleteWithBody”的生产者模板支持内容类型/正文内容。

String endpoint = https://testuri.com/resource;
endpoint = https://testuri.com/resource?deleteWithBody=true;
Exchange exchange;
exchange.getIn.setBody("test");
exchange.getIn.setHeader("Content-Type","application/json");
ProducerTemplate template = exchange.set(endpoint, exchange);