2017-01-30 26 views
0

我正在開發一個服務,在一個路徑上使用不同的查詢參數調用。我有一個路由綁定到http:akka-http如何接受無效的URI [不會解決]

val route: Route = { 
    get { 
     pathPrefix("myRoute"){ 
      parameterMap{ params => 
       complete(
        MyHandler.genExternResponse(params) 
       ) 
      } 
     } 
    } 

val bindingFuture = Http().bindAndHandleAsync(Route.asyncHandler(new myEndpoint().route), "localhost", 8081) 

,因爲我有沒有影響對使用什麼參數,我不能排除含有未編碼的特殊字符如德國變音符號或商標標識的電話。 例如

www.myhost.com/myRoute?param1=asd&param2=adäöü 

我知道,這些網址是無效的,但其中一項規定是,即使這些字符的請求被接受UND我處理他們的URL編碼。 問題是,當我調用上述服務時,akka-http拒絕帶有Response-status 400的請求,甚至沒有將它交給我的代碼。 有沒有一種方法可以讓我自己處理這些請求並處理它們,或者讓akka-http對我進行特殊字符的URL編碼。

編輯: 不會解決

+0

你能張貼堆棧跟蹤? –

+0

不知道如何,因爲打印堆棧跟蹤的代碼中沒有錯誤,並且akka-http僅響應400. –

+0

它可能是拋出異常的'MyHandler.genExternResponse'嗎?拋出的異常將轉換爲400.如果將代碼更改爲完整(「ok」),則不會出現錯誤,所以它不太可能成爲Akka的錯 –

回答

1

嘗試這個

val route: Route = { 
    get { 
    pathPrefix("myRoute"){ 
     parameters('params) 
      { params => 
      complete(
       MyHandler.genExternResponse(params) 
      ) 
     } 
    } 
} 

val bindingFuture = Http().bindAndHandleAsync(Route.asyncHandler(new myEndpoint().route), "localhost", 8081) 
+0

可悲的是,沒有工作: 〜curl -i http:// localhost:8080/myRoute \?page \ =täst HTTP/1.1 400錯誤請求 服務器:akka-http/10.0.3 日期:2017年1月31日星期二10:10: 18 GMT Connection:close Content-Type:text/plain;字符集= UTF-8 內容長度:96 非法請求目標:無效輸入'Ã',預期原始查詢字符或'EOI'(第1行,第13列)% –

+0

更改參數名稱curl -i localhost:8080/myRoute?params =täst – Dhirendra

+0

也這樣做了,請求沒有到達我的端點。我認爲akka-http無法從正常配置的連接創建HttpRequest,因爲它包含非7位ASCII字符 –