Flutter Dio 发布一个带有数组的对象

Muj*_*ood 5 http dart flutter dio

我正在尝试使用对象向 api 发布请求“

var params =  {
    "item": "itemx",
    "options": [1,2,3],
    };
    print(params);
    try {
      Response response = await _dio.post(getAddToCartURL,
          queryParameters: params,
          options: Options(headers: {
            HttpHeaders.contentTypeHeader: "application/json",
          }));

    } catch (error, stackTrace) {
      print("Exception occurred: $error  stackTrace: $stackTrace");
      return false;
    }
Run Code Online (Sandbox Code Playgroud)

Dio 将对象发送为:

POST /api/add-to-cart/?item=itemx&options%5B%5D=1&options%5B%5D=2&options%5B%5D=3 
Run Code Online (Sandbox Code Playgroud)

其中 api 将其识别为错误的请求。

我在这里做什么错了?我什至尝试将列表设为 ["1","2","3"],它是一样的。

dum*_*azy 13

这一切都取决于 API 的期望。我建议尝试将其编码为 JSON。

var params =  {
  "item": "itemx",
  "options": jsonEncode([1,2,3]),
};
Run Code Online (Sandbox Code Playgroud)

但是在查询参数中发送复杂数据并不总是那么容易。由于您无论如何都在使用 POST,因此可能将 JSON 对象作为正文发送,而不是使用查询参数。

var params =  {
  "item": "itemx",
  "options": [1,2,3],
}; 
...
Response response = await _dio.post(getAddToCartURL,
  options: Options(headers: {
    HttpHeaders.contentTypeHeader: "application/json",
  }),
  data: jsonEncode(params),
);
Run Code Online (Sandbox Code Playgroud)