Akka:无效的URI

Ran*_*ize 0 scala akka

我在用

akka.http.scaladsl.model.Uri
Run Code Online (Sandbox Code Playgroud)

对于以下url/GET:

http:// localhost:8000/some-service/getSomething?param = {"name":"john","street":"SOMEWHERE STREET","surname":"smith"}

(是的,json是在一个get/query参数)

但我得到了:

akka.http.scaladsl.model.IllegalUriException: Illegal URI reference: Invalid input ' ', expected raw-query-char, '#' or 'EOI'
Run Code Online (Sandbox Code Playgroud)

我无法得到该URL的错误.我在这里阅读使用的RFC规范:

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

但我仍然无法弄明白.有帮助吗?

cmb*_*ter 5

正如我在评论中提到的那样,你需要url endode json,以便根据RFC规范,带有查询参数的完整url是有效的.首先,让我们再次展示什么是破碎的.考虑一下你有这个代码:

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

val akkaUri = Uri(s"$baseUri/?json=$json")
Run Code Online (Sandbox Code Playgroud)

这是构建Akka的一种方法Uri,但是这种方式将被破坏并抛出异常,因为查询参数未正确编码.如果您将代码更改为此代码,那么事情就会起作用:

val akkaUri = Uri(baseUri).withQuery(Uri.Query(Map("json" -> json)))
Run Code Online (Sandbox Code Playgroud)

通过使用withQuery,你允许Akka Http框架正确url编码params,如果你只是Uri从完整的uri字符串构造它将不会发生