使用Map飞镖HTTP POST 作为身体
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Map飞镖HTTP POST 作为身体相关的知识,希望对你有一定的参考价值。
Dart http package的post
方法只接受String
,List<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 作为身体的主要内容,如果未能解决你的问题,请参考以下文章