使用JSON数组进行Flutter POST

时间:2018-06-07 08:43:09

标签: http dart flutter

我需要使用包含Array的JSON创建一个post请求。 http.post方法仅接受Map<String, String>。因此,我无法传递类型为<String,dynamic>的Map,因为Map将包含List。这是我的明确HttpClientRequest

的代码
String jsonString = json.encode(body); // encode map to json
List<int> bodyBytes = utf8.encode(jsonString); // utf8 encode
HttpClient client = new HttpClient();
HttpClientRequest request = await client.postUrl(uri);
// it's polite to send the body length to the server

request.headers.set('Content-Length', bodyBytes.length.toString());
request.headers.set('Authorization', '...');
request.headers.set('X-Authorization', apiKey);
request.headers.set("Accept", "application/json");
request.headers.set('Content-Type', 'form-data');
request.add(bodyBytes);
HttpClientResponse response = await request.close();
response.transform(utf8.decoder).listen((contents) {
  // handle data
  return jsonDecode(contents);
});

问题是,上述请求失败。

编辑:

创建的json是: {
"subject":"PLEASE", "message":"JUST. WORK.", "filter":"[8]", }

但服务器期望的JSON是:

{
"subject":"PLEASE", "message":"JUST. WORK.", "filter":[8], }

我主要担心的是如何创建一个JSON数组...

1 个答案:

答案 0 :(得分:0)

发现问题。有两个主要问题:

  1. 我在添加List时将Map转换为JSON字符串。仅将List直接添加到Map后,它似乎生成了正确的JSON。
  2. 必须在请求标头中将content-type设置为application / json。
  3. 感谢@Edman增加了一些方向。