我需要从我的 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 给我一个错误提示
{message: Missing input json., status: false}
我如何在 Flutter 中为 Http GET 请求发送原始(或更确切地说 JSON)请求正文?
最佳答案
获取
GET 请求不是为了向服务器发送数据(而是 see this )。这就是 http.dart
get
方法没有 body
参数的原因。但是,当您想要指定从服务器获取的内容时,有时您需要包含查询参数,这是一种数据形式。查询参数是键值对,因此您可以像这样将它们包含为映射:
final queryParameters = {
'name': 'Bob',
'age': '87',
};
final uri = Uri.http('www.example.com', '/path', queryParameters);
final headers = {HttpHeaders.contentTypeHeader: 'application/json'};
final response = await http.get(uri, headers: headers);
发布
与 GET 请求不同,POST 请求用于在正文中发送数据。你可以这样做:
final body = {
'name': 'Bob',
'age': '87',
};
final jsonString = json.encode(body);
final uri = Uri.http('www.example.com', '/path');
final headers = {HttpHeaders.contentTypeHeader: 'application/json'};
final response = await http.post(uri, headers: headers, body: jsonString);
请注意,参数是 Dart 端的 Map。然后通过 dart:convert
库中的 json.encode()
函数将它们转换为 JSON 字符串。该字符串是 POST 正文。
因此,如果服务器要求您在 GET 请求正文中向其传递数据,请再次检查。虽然可以用这种方式设计服务器,但它不是标准的。
关于json - Flutter:为 Http GET 请求发送 JSON 正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55331782/