2015-12-21 57 views
1

我通过使用camel使用restlet来暴露休息服务。restlet内容类型,使用restlet进行版本控制

我已经公开了一个休息服务作为一端,在另一端我已覆盖过程方法。代码如下所示,

from("restlet:/service/serviceName/{serviceId}?restletMethod=PUT").process(new Processor() { 
    @Override 
    public void process(Exchange exchange) throws Exception { 
    //Implementation goes here. 
    } 
} 

我在这里有两个问题。

  • 我不能设置内容类型的要求
  • 我不能 实现内容类型

我用下列选项尝试的版本。

setHeader(Exchange.CONTENT_TYPE, simple("application/json")) 

setHeader(Exchange.ACCEPT_CONTENT_TYPE, simple("application/json")) 

仍然问题没有解决。有没有其他的选择?

回答

0

所以你的路线是从。这意味着你向它发送一个请求。

  1. 从fiddler,chrome或其他需要标题的地方发送请求。

  2. 将日志记录添加到打印出包括标题在内的整个交换的路由。在这里你可以找到Content-Type和所有其他的HTTP头文件。

  3. 要访问它们,您需要像访问其他标题一样访问Exchange上的标题。

我不明白你为什么在那里设置标题。

例如,在你的过程代码,你可以这样做:

String contentType=(String) exchange.getIn().getHeader("Content-Type"); 
     if (contentType.equals("application/json")) { 
//do something 
} 

注意,你需要确认头部被称为Content-Type和不Content-Type或类似的东西,因为的Restlet是区分大小写。这就是为什么您需要添加日志记录以查看交换机上标题的名称。

+0

不错,是它为我工作。但是,在这种情况下,请求将进入处理方法内部,那么我们正在验证内容类型。 我期待在自己的初始阶段进行同样的验证,就像我们使用泽西/ cxf并且我们试图发送错误的Content-Type请求一样,它自己不允许处理请求的服务。 **是否可以在此处进行相同类型的验证?? ** –

+0

请参阅camel-restlet文档。 http://camel.apache.org/restlet.html,您可以在restlet URI中设置参数CamelAcceptContentType,以便将其限制为您选择的Content-Type。 –

+0

如果它有效,请将其标记为答案。 –