2017-02-01 27 views
5

Mam następującą strukturę:Firebase REST Database dostać o wartości orderby i equalTo

  • mobilny klient podłączania do Google App App Engine (Java)
  • GAE czyni ją trochę informacji z Firebase Database z zaproszenia REST

Ponieważ pakiet SDK Firebase Admin nie działa dobrze z GAE z powodu wątków w tle, postanowiłem użyć interfejsu REST API Firebase. Wszystko działa poprawnie, gdy aktualizuję Bazę danych Firebase lub otrzymuję coś z określonej ścieżki, ale kiedy chcę filtrować dane, napotykam problem.

Dokonując Curl żądania wszystko działa świetnie:

curl -X GET \ 
-H 'Authorization: Bearer auth_token' \ 
'https://my_project.firebaseio.com/items.json?orderBy="$value"&equalTo="some_string"' 

Ale kiedy robi dokładnie to samo żądanie przy użyciu HttpURLConnection lub URLFetchService z kodu Java w mojej aplikacji GAE otrzymuję dziwne błędy. Początkowo te zostały urlencoding błędy, więc musiałem zmienić adres URL, aby coś takiego:

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

Ale nawet po tym, że otrzymam 400 kody błędów z następującym komunikatem:

{ "błąd": "orderby muszą być zdefiniowane, gdy inne parametry zapytań są zdefiniowane" }

Mój kod prośba wygląda następująco:

URL url = URL(urlString); 
HTTPRequest request = HTTPRequest(url, HTTPMethod.GET, opts) 
request.addHeader(HTTPHeader(AUTH_HEADER, "Bearer " + accessToken)); 
HTTPResponse responseRaw = service.fetch(request); 

Próbowałem używać różnych wartości jako urlString (po prostu przypisanie znaków do zmiennej), aby nie 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\""; 

Trzecia wartość spowodował wyjątek i żadne żądanie nie zostało wysłane. Co więcej usuwając parametr equalTo sprawia, że ​​praca żądania, mam 200 i JSON w odpowiedzi:

String urlString = "https://my_project.firebaseio.com/items.json?orderBy=%22$value%22"; 

Każdy pomysł co robię źle?

+0

Proszę dodać kod Java, który deklaruje i zainicjował 'urlString'. –

+0

@FrankvanPuffelen dodane w opisie. Po prostu przypisałem do niego ciąg znaków, aby upewnić się, że w ciągu znaków nie ma błędu. –

Odpowiedz

1

To było bolesne, ale skonfigurowałem serwer proxy, aby zobaczyć wychodzące żądanie z lokalnego serwera aplikacji i pokazywało pewne znaki Unicode, które spowodowały problem.

orderBy\u200c\u200b= 

Po usunięciu tych dwóch znaków wszystko działa tak, jak powinno.