Flutter Dio使用数组发布对象

时间:2020-05-01 12:49:22

标签: http flutter dart dio

我正在尝试将对象的请求发布为

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;
    }

Dio将对象发送为:

POST /api/add-to-cart/?item=itemx&options%5B%5D=1&options%5B%5D=2&options%5B%5D=3 

api将其识别为错误请求。

我在这里做什么错?我甚至尝试过将列表命名为[“ 1”,“ 2”,“ 3”],它是相同的。

1 个答案:

答案 0 :(得分:9)

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

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

但是在查询参数中发送复杂数据并不总是那么容易。由于无论如何您都在使用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),
);