如何解决Dart HTTP请求报错Expected a value of type 'int', but got one of type 'String'
错误原因
- 你对请求体的构造逻辑有误:你将单个坐标对象单独编码为JSON字符串后放入数组传递给
body参数,http库会将该数组按表单格式处理而非输出JSON格式,导致服务端解析到的参数类型不匹配,触发类型错误。 - 缺少
Content-Type: application/json请求头,服务端无法正确识别请求体的格式为JSON。 - 你携带的
Access-Control-Allow-Origin属于响应头,在请求中添加无实际作用,可以直接移除。
正确实现代码
import 'dart:convert'; import 'package:http/http.dart' as http; Future<String> deleteObstacle(String server, int x, int y) async { // 先构造完整的数组对象,再整体编码为JSON字符串 final requestBody = jsonEncode([ <String, int>{"x": x, "y": y} ]); final response = await http.delete( Uri.parse('$server/admin/obstacles/'), headers: { "Accept": "application/json", "Content-Type": "application/json", // 必须指定请求体格式为JSON }, body: requestBody, ); if (response.statusCode == 200) { Map<String, dynamic> launchResponse = jsonDecode(response.body); return launchResponse['response']; } else { throw Exception("ERROR Attempting to Delete obstacle"); } }
修改后请求体将完全符合要求的[{"x": 1, "y": 1}]JSON数组格式,类型错误会自动修复。
内容的提问来源于stack exchange,提问作者Naeem Thomas
相关产品推荐
相关产品推荐

