我需要从我的Flutter应用程序向API发出GET请求,该应用程序要求请求主体为JSON(原始)。
我在Postman中使用JSON请求体测试了API,它似乎工作正常。
现在在我的Flutter应用程序上,我尝试做同样的事情:
_fetchDoctorAvailability() async {
var params = {
"doctor_id": "DOC000506",
"date_range": "25/03/2019-25/03/2019" ,
"clinic_id":"LAD000404"
};
Uri uri = Uri.parse("http://theapiiamcalling:8000");
uri.replace(queryParameters: params);
var response = await http.get(uri, headers: {
"Authorization": Constants.APPOINTMENT_TEST_AUTHORIZATION_KEY,
HttpHeaders.contentTypeHeader: "application/json",
"callMethod" : "DOCTOR_AVAILABILITY"
});
print('---- status code: ${response.statusCode}');
var jsonData = json.decode(response.body);
print('---- slot: ${jsonData}');
}
但是API给了我一个错误消息
{消息:缺少输入json.,状态:假}
如何在Flutter中发送Http GET请求的原始(或者更确切地说是JSON)请求体?
5条答案
按热度按时间voj3qocg1#
获取
GET请求不用于向服务器发送数据(但是see this)。这就是
http.dart
get
方法没有body
参数的原因。但是,当你想指定你从服务器得到什么时,有时候你需要包括查询参数,这是一种数据形式。查询参数是键-值对,因此您可以将它们作为Map包括在内,如下所示:POST
与GET请求不同,POST请求 * 是 * 用于发送正文中的数据。你可以这样做:
注意,这些参数是Dart端的Map,然后通过
dart:convert
库中的json.encode()
函数将其转换为JSON字符串,该字符串就是POST主体。因此,如果服务器要求你在GET请求体中传递数据,请再次检查。虽然可以用这种方式设计服务器,但它不是标准的。
z6psavjg2#
uri.replace...
返回一个新的Uri
,因此必须将它赋给一个新变量,或者直接在get
函数中使用。使用post:
blmhpbnm3#
可以按如下方式使用Request类:
另外,请注意, Postman 可以convert an API request into a code snippet在超过15种语言。如果你选择 dart ,你会发现一个类似的代码以上。
1u4esq0p4#
它可能会帮助那些使用Getx进行API集成的人。我们可以使用请求方法来满足这些需求。
dauxcl2d5#
如果你想通过一个GET请求发送复杂/嵌套的数据,就像下面的例子一样,你可以使用一个在github https://github.com/opatajoshua/SimplifiedUri上创建的简单类i
输出