如何使用数组属性发送POST请求(Ionic 2 HTTP插件)?

时间:2017-03-24 19:36:32

标签: ionic-framework ionic2 ionic-native

在我的一个Ionic 2项目中,我需要向服务器发送POST请求,其中JSON主体看起来像这样:

var body = { "prop" : 1, 
  "prop2" : "Test", 
  "prop3": [{ "id" : "1", "qty": 1, "details": "Test" }] 
}

我使用以下代码在Android中使用本机HTTP插件(1.2.0)调用服务器:

http.post(url, body, {}).then(function() { ... })

但我的服务器收到以下内容:

{ "prop" : 1, 
  "prop2" : "Test", 
  "prop3": "[{ \"id\" : \"1\", \"qty\": 1, \"details\": \"Test\" }]"
}

正如您所看到的,数组属性“prop3”正在转换为字符串,因此我的服务器无法解析它,因为它需要一个数组,而不是一个字符串。

我可以做的一件事就是更改服务器端代码以将此字符串解析回数组(但这远非理想情况)。我能做的另一件事是用JSON.stringify手动解析JSON对象。

那么,这只是插件中的一个错误,还是我在这里遗漏了什么?

Native HTTP plugin

2 个答案:

答案 0 :(得分:1)

因此,在看了插件的源代码(Java one,我在Android中测试我的应用程序)后,我似乎无法使用该插件是(我需要修改它)。我发现的是:

在CordovaHttpPost.java中,请求的主体作为表单数据(简单键值)发送。

request.form(this.getParams());  //Map<?, ?>

这就是为什么我的数组属性被转换为字符串(以及任何其他复杂对象)

TL; DR此插件仅用于发送简单的JSON键值对象(没有嵌套,没有复杂对象,没有数组等)。

答案 1 :(得分:0)

尝试设置http.setDataSerializer("json"); 并照常发送数据:http.post(url, body, {})

然后http插件将发送带有application / json内容类型的数据并支持json的深层结构,如文档中所述: https://github.com/silkimen/cordova-plugin-advanced-http#setdataserializer