2016-08-22 4 views
0

私は、次のURL/GETのためにアッカ:ない有効なURI

akka.http.scaladsl.model.Uri 

を使用しています:

http://localhost:8000/some-service/getSomething?param= { "名": "ジョン"、 "ストリート": "世界ふれあい街歩き"、「姓":" スミス "}

(はいjsonget/queryのparamである)が、私は取得しています:

akka.http.scaladsl.model.IllegalUriException: Illegal URI reference: Invalid input ' ', expected raw-query-char, '#' or 'EOI' 

私はそのURLに何が間違っているのか分かりません。

http://tools.ietf.org/html/rfc3986#section-4.1

をまだ私はそれを把握することはできません:私はここで使用するRFCの仕様を読んでいます。どんな助け?

+1

正確にどの文字が間違っているかを示します。 –

+0

あなたはそのjsonをURLでエンコードする必要があります – cmbaxter

+0

完全なコード例を投稿するのは簡単ですが、おそらく.withQueryを正しく使用していない可能性があります。 –

答えて

5

私のコメントで述べたように、完全なurlとquery paramsがRFC仕様に従って有効であるように、jsonをエンドノードにする必要があります。まず、何が壊れているかを見てみましょう。あなたはこのコードを持っていることを考えてみましょう:

val json = """{"foo":"some foo"}""" 
val baseUri = "http://some.host.com:8080/test" 

val akkaUri = Uri(s"$baseUri/?json=$json") 

これはアッカUriを構築するための一つの方法ですが、この方法は、破壊され、クエリparamは適切にエンコードされていないように例外をスローされます。あなたはこの代わりにあなたのコードを変更する場合は、物事が動作します:

val akkaUri = Uri(baseUri).withQuery(Uri.Query(Map("json" -> json))) 

withQueryを使用することで、許可アッカのHttpフレームワーク正しくURLエンコードあなただけのUriを構築する場合は発生しませんのparams、完全なURI文字列

関連する問題