【发布时间】:2017-06-18 13:53:17
【问题描述】:
我有以下架构:
- 移动客户端连接到 Google App Engine 应用 (Java)
- GAE 通过 REST 调用从 Firebase 数据库获取一些信息
由于后台线程,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"'
但是,当在我的 GAE 应用程序中使用 java 代码中的 HttpURLConnection 或 URLFetchService 执行完全相同的请求时,我收到了奇怪的错误。起初这些是 urlencoding 错误,所以我不得不将我的 url 更改为这样的:
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);
我尝试使用不同的值作为 urlString(只是将字符串分配给一个变量)没有任何效果:
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\"";
第三个值导致异常,没有发送请求。更重要的是删除 equalTo 参数使请求工作,我得到 200 和 json 作为响应:
String urlString = "https://my_project.firebaseio.com/items.json?orderBy=%22$value%22";
知道我做错了什么吗?
【问题讨论】:
-
请添加声明和初始化
urlString的Java代码。 -
@FrankvanPuffelen 在描述中添加。我只是将字符串分配给它以确保字符串中没有错误。
标签: java rest google-app-engine firebase firebase-realtime-database