json - Flutter:为 Http GET 请求发送 JSON 正文

标签 json dart flutter

我需要从我的 Flutter 应用向 API 发出 GET 请求,这需要请求正文为 JSON(原始)。

我在 Postman 中使用 JSON 请求正文测试了 API,它似乎工作正常。

enter image description here

现在在我的 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/

相关文章:

php - Perl 发布到 php

image - 从URL获取图像并将其转换为base64字符串-Flutter

date - 我如何判断DateTime.Now()是否在其他DateTime之后的一天

firebase - 从Firebase获取用户数据

android - flutter - 如何加快解析 Json 函数的计算速度

python - 如果在python中发生错误,则处理异常

java - 如何解析具有不同键值的json对象?

json - aws athena - 通过 json 对象数组创建表

Flutter Provider 不会重建小部件

android - Flutter 中的 BuildConfig(或替代方案)