Mar*_*Bak 5 java rest google-app-engine firebase firebase-realtime-database
我有以下架构:
由于后台线程,Firebase Admin SDK无法与GAE一起使用,因此我决定使用Firebase REST API.当我更新Firebase数据库或从特定路径获取某些内容时,一切顺利,但当我想过滤数据时遇到问题.
在提出cUrl请求时,一切都很好:
curl -X GET \
-H 'Authorization: Bearer auth_token' \
'https://my_project.firebaseio.com/items.json?orderBy="$value"&equalTo="some_string"'
Run Code Online (Sandbox Code Playgroud)
但是当我在GAE应用程序中使用来自Java代码的HttpURLConnection或URLFetchService执行完全相同的请求时,我收到了奇怪的错误.起初那些是urlencoding错误,所以我不得不改变我的网址:
https://my_project.firebaseio.com/items.json?orderBy=%22%24value%22&equalTo=%22some_string%22
但即使在那之后我收到400个错误代码,并带有以下消息:
{"error":"必须在定义其他查询参数时定义orderBy"}
我的请求代码如下所示:
URL url = URL(urlString);
HTTPRequest request = HTTPRequest(url, HTTPMethod.GET, opts)
request.addHeader(HTTPHeader(AUTH_HEADER, "Bearer " + accessToken));
HTTPResponse responseRaw = service.fetch(request);
Run Code Online (Sandbox Code Playgroud)
我尝试使用不同的值作为urlString(简单地将字符串赋值给变量)到无vail:
String urlString = "https://my_project.firebaseio.com/items.json?orderBy=%22%24value%22&equalTo=%22some_string%22";
String urlString = "https://my_project.firebaseio.com/items.json?orderBy=%22$value%22&equalTo=%22some_string%22";
String urlString = "https://my_project.firebaseio.com/items.json?orderBy=\"$value\"&equalTo=\"some_string\"";
Run Code Online (Sandbox Code Playgroud)
第三个值导致异常,并且未发送任何请求.什么更多删除equalTo参数使请求工作,我得到200和json响应:
String urlString = "https://my_project.firebaseio.com/items.json?orderBy=%22$value%22";
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
找到它很痛苦,但我设置了一个代理来查看来自本地应用程序引擎服务器的传出请求,它显示了一些导致问题的无宽度空格 unicode 字符。
orderBy\u200c\u200b=
Run Code Online (Sandbox Code Playgroud)
删除这两个字符后,一切正常。
| 归档时间: |
|
| 查看次数: |
1516 次 |
| 最近记录: |