web-dev-qa-db-ja.com

Flutter Dioはアレイを使ってオブジェクトを投稿します

私はオブジェクトとAPIを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;
    }
 _

DIOはオブジェクトを次のように送信します。

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

aPIがそれを悪い要求と認識する。

ここでやっているのは何が悪いのですか?私は[「1」、「2」、「3」でリストを試してみました、それは同じです。

3
Mujtaba Mahmood

それはすべてAPIがどのように期待するかによって異なります。 JSONとしてエンコードしようとすることをお勧めします。

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

しかし、クエリパラメータに複雑なデータを送信すると、必ずしも簡単ではありません。とにかくPOSTを使用しているので、クエリパラメータを使用する代わりにJSONオブジェクトをBODYとして送信してください。

_var params =  {
  "item": "itemx",
  "options": [1,2,3],
}; 
...
Response response = await _dio.post(getAddToCartURL,
  options: Options(headers: {
    HttpHeaders.contentTypeHeader: "application/json",
  }),
  data: jsonEncode(params),
);
_
11
dumazy