【问题标题】:How to send large json data inside the body of http post如何在 http post 正文中发送大型 json 数据
【发布时间】:2021-04-09 17:34:45
【问题描述】:

我需要用我的 post 方法发送一个大对象。但它一直给我错误。

Future getResults() async {
    var res = await http.post('$SERVER_IP/api/anything/search',
    headers: {'Authorization': token, "Accept": "application/json"}, 
    body: {
      "name": "",
      "type": "",
      "organization": "",
      "state": "CA",
      "appliesTo": {
        "Camp": "true",
        "Fees": "false",
        "Lessons": "false",
      },
    }).catchError((e) => print({"error": e}));
    return json.decode(res.body);
  }

我意识到 body 只接受 Map。所以我将 json.encode 添加到我的“appliesTo”对象中。

Future getResults() async {
    var res = await http.post('$SERVER_IP/api/anything/search',
    headers: {'Authorization': token, "Accept": "application/json"}, 
    body: {
      "name": "",
      "type": "",
      "organization": "",
      "state": "CA",
      "appliesTo": json.encode({
        "Camp": "true",
        "Fees": "false",
        "Lessons": "false",
      }),
    }).catchError((e) => print({"error": e}));
    return json.decode(res.body);
  }

之后它起作用了,我得到了一个返回的数据。但是我的服务器忽略了整个“appliesTo”对象。所以我没有得到预期的数据。这不是我的服务器的问题。我用邮递员测试了它。这个颤动的 http 帖子没有发送正确的 json 正文。 所以我的问题是如何将大物体附加到身体上?在对象中间使用 json.encode 错误吗?正确的做法是什么?谁能帮忙? PS:我用 json.encode 包裹了整个地图,它给了我错误

【问题讨论】:

  • 如果您显示错误会有所帮助。
  • 你的意思是当应用停止时?它类似于“Map 在 Map 中不可接受。这是我没有使用 json.encode 的时候。但现在我正在获取数据。但我的后端忽略了 json.encode 中的内容. 所以,我得到了不同的结果。
  • 那么,我真正想知道的是如何在http.post 中添加这种大对象?在中间使用 json.encode 是错误的方法吗?

标签: flutter http dart


【解决方案1】:

http 包的 documentation 声明

如果bodyMap,则使用encoding 将其编码为表单字段。请求的内容类型将设置为"application/x-www-form-urlencoded";这不能被覆盖。

如果您想发送 JSON 数据,则必须手动编码 body。由于内容类型默认为text/plain,如果bodyString,您还必须明确设置Content-Type 标头。

http.post('$SERVER_IP/api/anything/search',
    headers: {
      'Authorization': token, 
      "Accept": "application/json", 
      "Content-Type": "application/json"
    }, 
    body: json.encode({
      "name": "",
      "type": "",
      "organization": "",
      "state": "CA",
      "appliesTo": {
        "Camp": "true",
        "Fees": "false",
        "Lessons": "false",
      },
    }))

【讨论】:

  • "Content-Type": "application/json" 是解决方案,因为它默认是 text/plain
猜你喜欢
  • 1970-01-01
  • 2016-11-02
  • 2018-12-08
  • 1970-01-01
  • 2013-11-18
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多