2015-12-21 61 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

如果它有效,請將其標記爲答案。 –