Java restlet内容类型,使用restlet进行版本控制

Java restlet内容类型,使用restlet进行版本控制,java,apache-camel,restlet,Java,Apache Camel,Restlet,我通过将restlet与camel一起使用来公开rest服务 我已经公开了一个rest服务作为一端,并在另一端重写了process方法。 代码如下所示 from("restlet:/service/serviceName/{serviceId}?restletMethod=PUT").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { //I

我通过将restlet与camel一起使用来公开rest服务

我已经公开了一个rest服务作为一端,并在另一端重写了process方法。 代码如下所示

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"))

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

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

  • 从fiddler、chrome或其他地方向它发送一个请求,其中包含您想要的标题

  • 将日志添加到打印整个exchange(包括标头)的路由。在这里您可以找到内容类型,以及所有其他HTTP头

  • 要访问它们,您需要像访问任何其他头一样访问Exchange上的头

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

    例如,在流程代码中,您可以这样做:

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

    注意,由于RESTLET是区分大小写的,所以需要验证头是否称为Content-Type,而不是Content-Type或类似的名称。这就是为什么您需要添加日志记录以查看exchange上的标头名称。

    因此您的路由是从。这意味着您向它发送请求

  • 从fiddler、chrome或其他地方向它发送一个请求,其中包含您想要的标题

  • 将日志添加到打印整个exchange(包括标头)的路由。在这里您可以找到内容类型,以及所有其他HTTP头

  • 要访问它们,您需要像访问任何其他头一样访问Exchange上的头

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

    例如,在流程代码中,您可以这样做:

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

    注意,由于RESTLET是区分大小写的,所以需要验证头是否称为Content-Type,而不是Content-Type或类似的名称。这就是为什么您需要添加日志以查看exchange上标题的名称。

    Nice one,是的,它对我有用。但是,在这种情况下,请求将进入process方法,然后我们将验证内容类型。我希望在it自身的初始阶段进行同样的验证,例如,如果我们使用jersey/cxf,并且我们试图发送一个内容类型错误的请求,那么it自身的服务将不允许处理该请求。此处是否可以进行相同类型的验证?请参阅camel restlet文档,您可以在restlet URI中设置参数CamelAcceptContentType,这样您就可以限制为您选择的内容类型。但是,在这种情况下,请求将进入process方法,然后我们将验证内容类型。我希望在it自身的初始阶段进行同样的验证,例如,如果我们使用jersey/cxf,并且我们试图发送一个内容类型错误的请求,那么it自身的服务将不允许处理该请求。此处是否可以进行相同类型的验证?请参阅camel restlet文档,您可以在restlet URI中设置参数CamelAcceptContentType,以便将其限制为您选择的内容类型。