2017-02-01 41 views
5

我有以下結構:火力地堡數據庫REST獲取與排序依據的價值和equalTo

  • 移動客戶端連接到谷歌App Engine應用程序(JAVA)
  • GAE使得會從火力地堡數據庫中的一些信息與REST調用

由於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"' 

但使用HttpURLConnection類或URLFetchService從Java代碼在我的GAE應用程序做的正是同樣的要求時,我收到奇怪的錯誤。起初那些被URL編碼錯誤,所以我有我的網址更改爲這樣的事情:

https://my_project.firebaseio.com/items.json?orderBy=%22%24value%22&equalTo=%22some_string%22

但即使在那之後我收到400個錯誤代碼有以下消息:

{ 「錯誤」: 「當其他查詢參數被定義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"; 

任何想法我做錯了什麼?

+0

請添加聲明並初始化'urlString'的Java代碼。 –

+0

@FrankvanPuffelen在說明中添加了。我只是將字符串分配給它以確保字符串中沒有錯誤。 –

回答

1

這很痛苦,但是我設置了一個代理來查看來自本地應用引擎服務器的傳出請求,並且顯示了導致問題的一些沒有寬度的空格unicode字符。

orderBy\u200c\u200b= 

刪除這兩個字符後,一切正常,因爲它應該。