Dart:如何用body发出GET请求



如何在飞镖中使用正文发送GET请求?

我尝试了SO的所有食谱(这个和那个以及更多(,但没有成功。

final queryParameters = {
"id": "6767676767676",
"device": "tatatata",
"user": {
"login": "login",
"password": "pwd",
}
};

这是复杂的JSON,我在发送请求时收到错误:final uri = Uri.http('44.44.444.444:8080', 'get-answer', queryParameters);

Exception: type '_InternalLinkedHashMap<String, Object>' is not a subtype of type 'Map<String, String>'

我认为您的queryParameters不应包含对象。

final queryParameters = {
"id": "6767676767676",
"device": "tatatata",
"login" : "login",
"password" : "password",
};

你试过吗:

var response = await get(url);
var fetchedData = json.decode(response.body);

获取的数据将采用 json 映射格式

我建议您使用http包,它非常适合执行http请求。 在发送数据之前,请确保使用jsonEncode函数将映射编码为 JSON 格式,并且要使用GET请求获取数据,请使用 jsonDecode 函数从 JSON 格式解码请求正文。

  • 这些函数是从dart:convert包导入
//import the packages
import 'package:http/http.dart' as http;
import 'dart:convert';
//other code here
final queryParameters = jsonEncode( {
"id": "6767676767676",
"device": "tatatata",
"login" : "login",
"password" : "password",
});
//we send the data to the server with the post method
await http.post("44.44.444.444:8080",queryParameters);
similarly for retrieving data:
final res = http.get("getUrl");
//if the request is successful we get the data
if(res.statusCode == 200)
final data = jsonDecode(res.body);

答案实际上是 Flutter 在exception message的这一部分中建议的:

"_InternalLinkedHashMap<字符串,对象>"不是类型为"映射<字符串,字符串>"的子类型

什么意思?

这意味着,你的一个变量'_InternalLinkedHashMap<String, Object>'的,颤振希望你将其更改为'Map<String, String>'类型

您应该将此'Map<String, String>'类型queryParameters

制作一个密钥

如何?

1.导入飞镖转换

通过导入dart:convert,我们将有jsonEncode方法


import 'dart:convert'; // put this at top of your file

2.将嵌套值转换为字符串


final nestedValue = {
"login": "login",
"password": "pwd",
};
String stringValue = jsonEncode(nestedValue); 

3.将其放回主要参数


final queryParameters = {
"id": "6767676767676",
"device": "tatatata",
"user": stringValue
};
final uri = Uri.http('44.44.444.444:8080', 'get-answer', queryParameters);

最终代码

这将是您的最终代码,如下所示:


import 'dart:convert'; // put this at top of your file

final nestedValue = {
"login": "login",
"password": "pwd",
};
String stringValue = jsonEncode(nestedValue); // add this
final queryParameters = {
"id": "6767676767676",
"device": "tatatata",
"user": stringValue
};
final uri = Uri.http('44.44.444.444:8080', 'get-answer', queryParameters);

相关内容

最新更新