我在用
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
但我仍然无法弄明白.有帮助吗?
正如我在评论中提到的那样,你需要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字符串构造它将不会发生
| 归档时间: |
|
| 查看次数: |
1300 次 |
| 最近记录: |