如何在飞镖中使用正文发送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);