我正在尝试将JSON正文查询参数放入http.get请求中。我什至尝试遵循这个Flutter: Send JSON body for Http GET request,但那里没有运气。无论我将什么放入params变量中,我都会从后端获得所有结果。我已经用邮递员测试了后端,并且一切正常
这是我的代码混乱
Future<List<Country>> fetchCountries(String name) async {
final token = Provider.of<Auth>(context, listen: false).token;
final params = {"name": "Uk"};
try {
Uri uri = Uri.parse(APIPath.findCountry());
final newUri = uri.replace(queryParameters: params);
print(newUri); //prints http://localhost:8080/country/find?name=uk
final response = await http.get(newUri,
headers: [APIHeader.authorization(token), APIHeader.json()]
.reduce(mergeMaps));
final jsonResponse = json.decode(response.body);
if (response.statusCode == 200) {
Iterable list = jsonResponse['result'];
print(list);
return list.map((model) => Country.fromJson(model)).toList();
} else {
throw HttpException(jsonResponse["error"]);
}
} catch (error) {
throw error;
}
}
将正文放入http.get请求中并不像http.post请求那样起作用。知道我在做什么错吗?
答案 0 :(得分:1)
有几件事要牢记。
GET请求消息中的有效负载没有定义的语义...
在GET请求的正文中发送任何数据是一种糟糕的体系结构样式。
2)如果您想忽略它,但仍然希望在GET请求中发送正文,则将内容类型标头设置为“ application / json”是有意义的。
3)您引用的示例在GET请求中未使用body。相反,它从给定的JSON对象检索参数值,并将其放入URL。然后,该URL将通过GET调用而没有正文。
我的建议: