使用Map飞镖HTTP POST 作为身体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Map飞镖HTTP POST 作为身体相关的知识,希望对你有一定的参考价值。

Dart http packagepost方法只接受StringList<int>Map<String, String>作为请求体。我需要使用Content-Type头应用程序/ json将此类的对象作为主体发送:

class CreateListingRequest {
  String title;
  List<ListingImage> images;
  List<int> categoryIds;
}

ListingImage在哪里

class ListingImage {
  String url;
  int position;
}

在邮递员中,我将使用Content-Type标头application/json将主体构建为原始json,如下所示:

{
  "title": "Testing transaction force fail",
  "listing_images": [
    {
      "url": "https://picsum.photos/500/500/?image=336",
      "position": 0
    },
    {
      "url": "https://picsum.photos/500/500/?image=68",
      "position": 1
    },
    {
      "url": "https://picsum.photos/500/500/?image=175",
      "position": 2
    }
  ],
  "category_ids": [19, 26]
}

在我看来,如果我能发送一个解决问题的Map<String, dynamic>,但我只能发送Map<String, String>

请帮忙。

答案

使用String encoded = json.encode(theMap);然后发布encoded。如果您需要特定的字符编码(例如utf-8),则使用utf8.encode(encoded)进一步对字符串进行编码并发布生成的字节数组。 (对于utf-8,第二步应该是不必要的,因为我认为这是默认值。)

值得考虑3种变体的作用:

  • List<int> - 发送一个不透明的字节数组
  • String使用字符编码将字符串编码为字节 - 并发送字节数组
  • Map<String, String> - 对x-www-form-urlencoded中的字符串键/值对进行编码并发送。

如果要发送更复杂的数据,则需要将其转换为上述之一(并且服务器需要知道如何解码它)。这就是content-type标题有用的地方。最终,服务器接收字节数组并将其转换回例如字符串,或某些json,或一组表单字段或图像。它知道如何根据标头和任何指定的编码执行此操作。

以上是关于使用Map飞镖HTTP POST 作为身体的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动的 POST 请求中将 Map 作为字符串发送?

有啥方法可以让 curl 连接并让我在输入时输入和发送身体片段?

如何在飞镖中侦听对象中Map属性的更改

在颤振飞镖中的 List<Map> 内搜索?

将List / Map作为POST参数泽西发送

颤振飞镖get.http响应给出html而不是json api