Ich habe an einem RCP-Client gearbeitet, um Wetterdaten zu verarbeiten.Mein RCP-Client gibt keine tiefe Kopie eines Objekts zurück
Was ich mache, ist 2 Dinge, zuerst habe ich den JSON scrapped ich werde verwenden und es in eine Dart-Datei. Siehe: https://dartpad.dartlang.org/a9c1fe8ce34c608eaa28
Meine server.dart Seite werden die Wetterdaten importieren, und dann gehen Sie folgendermaßen vor:
import "dart:io";
import "weather_data.dart";
import "dart:convert";
import "package:rpc/rpc.dart";
find ApiServer _apiServer = new ApiServer(prettyPrint:true);
main() async {
Weather w = new Weather(WeatherJson);
TestServer ts = new TestServer(w);
_apiServer.addApi(ts);
HttpServer server = await HttperServer.bind(InternetAddress.ANY_IP_V4, 12345);
server.listen(_apiServer.httpRequestHandler);
}
class Weather{
Map weather;
Weather(this.weather){
Map get daily => weather["daily"];
}
}
@ApiClass(name:"test_server", version: 'v1', description: 'This is a test server api to ping for some quick sample data.')
class TestServer {
Weather myWeather;
TestServer(this.myWeather){
}
@ApiMethod(method:'GET', path: 'daily')
Map<String, Object> getDaily(){
return myWeather.daily;
}
}
So kann der Server korrekt gestartet wird, und ich werde gehen zu localhost:12345/test_server/v1/daily
und es wird zurückkehren dieses:
{
"summary": {},
"icon": {},
"data": {}
}
das ist nicht korrekt. Wenn Sie die JSON-Daten nachschlagen, sind Zusammenfassung und Symbol beide Zeichenfolgen und Daten sind ein Array. Sie sind auch leer und sollten die Daten enthalten, die ich zurückgeben wollte.
Warum tritt dies auf? Ist es, weil ich eine Map<String, Object>
zurückgebe? Ich habe versucht, es einzurichten: Map<String, dynamic>
, aber der Dart-Compiler mochte es nicht.
Wie bekomme ich diese Daten, um den richtigen Datensatz zurückzugeben?
Die Dart-Website für RPC befindet sich unter: https://github.com/dart-lang/rpc und Sie können sehen, dass unter Methoden der Rückgabewert einer Methode entweder eine Instanz einer Klasse oder eine Zukunft sein kann. Das macht Sinn wie üblich, also setze ich es auf Map<String,Object>
, obwohl ich versuche, vage zu sein, indem ich sage: Map
war nicht ausreichend.
Edit:
Wenn dies meist ohne RPC in dart Pad tut, scheint es richtig zu arbeiten, die von einer Probe von: https://dartpad.dartlang.org/3f6dc5779617ed427b75
Dies führt mir etwas falsch mit dem Parsing-Tool zu glauben, Wie es scheint, ermöglicht der Rückgabetyp im Dartpad die Rückgabe von Map
, Map<String, Object>
und Map<String, dynamic>
.
Ich möchte einen Grund für den Downvote. Ich glaube, das ist eine gut durchdachte Frage mit einem soliden Codebeispiel. – Fallenreaper
Mach dir keine Sorgen zu viel. Wenn jemand abwinkt, ohne einen Kommentar zu hinterlassen, was verbessert werden muss, ist es am besten, ihn zu ignorieren. Ich habe RPC nicht verwendet, weiß also nicht, worum es bei dem Problem geht. –