【发布时间】:2016-07-09 20:24:16
【问题描述】:
我一直在开发一个 RCP 客户端来处理天气数据。
我做的是两件事,首先我抓取了我将使用的 JSON 并将其放入一个 dart 文件中。见:https://dartpad.dartlang.org/a9c1fe8ce34c608eaa28
我的server.dart页面,会导入天气数据,然后进行如下操作:
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;
}
}
所以,服务器正确启动,我会去localhost:12345/test_server/v1/daily,它会返回这个:
{
"summary": {},
"icon": {},
"data": {}
}
这是不正确的。如果查找 JSON 数据,摘要和图标都是字符串,数据是数组。它们也是空的,应该包含我想要返回的数据。
为什么会发生这种情况?是因为我要返回Map<String, Object> 吗?我试图将其设置为:Map<String, dynamic> 但 dart 编译器不喜欢它。
如何让这些数据返回正确的数据集?
用于 RPC 的 Dart 网站位于:https://github.com/dart-lang/rpc
可以看到在methods下,方法的返回值可以是类的实例,也可以是future。按照惯例,这是有道理的,所以我将其设置为 Map<String,Object>,尽管试图含糊其辞地说:Map 是不够的。
编辑:
当主要在没有 RPC 的飞镖垫中执行此操作时,它似乎可以正常工作,通过以下示例:https://dartpad.dartlang.org/3f6dc5779617ed427b75
这让我相信解析工具有问题,因为似乎 dartpad 中的返回类型允许返回 Map、Map<String, Object> 和 Map<String, dynamic>。
【问题讨论】:
-
想要一个拒绝投票的理由。我相信这是一个经过深思熟虑的问题,有一个可靠的代码示例。
-
别太担心。如果有人在没有发表评论的情况下投票否决了需要改进的地方,最好忽略它。我没有使用过 RPC,所以不知道是什么问题。