2015-05-29 37 views
1

我正在使用restlet框架製作REST Web服務。我正在使用org.restlet 2.3.1 jar無法在Restlet Web服務中的http響應頭中設置狀態原因

我必須自定義錯誤響應頭。根據具體問題,我必須在響應頭中顯示響應狀態代碼和狀態原因。 爲此我創建了一個擴展StatusService並覆蓋toStatus方法的類。我檢查throwable並相應地設置狀態。請參考以下示例代碼。

@Override 
public Status toStatus(Throwable throwable, Request request, 
     Response response) { 
    if (throwable != null) { 
     return new Status(500,throwable, "DD","DD"); 
    } 

    return super.toStatus(throwable, request, response); 
} 

所以每當異常從的Restlet代碼拋出正是在這裏捕獲並返回錯誤響應。錯誤響應具有正確的狀態代碼,但是狀態原因不正確。而不是DD它顯示內部服務器錯誤。

HTTP/1.1 500內部服務器錯誤

是有一些,但與我使用Restlet框架版本。 請幫忙。

回答

0

我認爲你不能改變預定義的HTTP狀態碼的原因。它們由HTTP規範本身定義...

如果要向客戶端提供其他提示,應使用響應負載並覆蓋狀態服務的方法toRepresentation

以下鏈接提供了有關如何執行此操作的更多詳細信息:https://templth.wordpress.com/2015/02/27/exception-handling-with-restlet/

編輯

按照要求,你也可以發送一些提示有關自定義響應報頭中的錯誤信息,如下所述:

@Override 
public Status toStatus(Throwable throwable, Resource resource) { 
    Status status = Status.SERVER_ERROR_INTERNAL; 

    Response response = resource.getResponse(); 

    Series<Header> responseHeaders = response.getHeaders(); 
    responseHeaders.add(new Header(
       "Some-Header", "my custom message")); 

    return status; 

} 

希望它可以幫助你, 蒂埃裏

+0

是否有可能在任何其他http響應頭中發送錯誤消息。我知道可以通過覆蓋toRepresentation來將錯誤消息作爲響應主體發送。但我不想在http響應正文中顯示錯誤消息。我想在http頭中發送錯誤消息。 – kaka

+0

是的,當然!我更新了我的答案,告訴你如何做到這一點...... –

+0

我對蒂埃裏的答案有一些小小的評論。您只需調用「resource.getReponse()」方法即可訪問該響應。然後,只需調用「Response#getHeaders()」方法即可訪問頭文件。另外,我會說生成的原因短語似乎是由底層HTTP連接器處理的。內部連接器(基於JDK的HttpServer類)顯示「內部服務器錯誤」,Jetty生成「服務器錯誤」響應短語。 –

相關問題