Dart http包的post方法只接受String、List或Map作为请求体。我需要发送这个列表作为body
List item = widget.product
.map((prod) => {
"product_id": prod.id,
"product_name": prod.title,
"product_quantity": prod.quantity,
"product_reference": prod.reference
}).toList();
在Postman中,我将以raw json的形式构建主体。
{"id_customer": "null",
"id_adresse": "null",
"id_carrier": "155",
"secure_key": "null",
"payment": "Paiement à la livraison",
"total_paid": "311.0",
"total_product": "298.0",
"total_shipping": "7.0",
"tax": "0.6",
"products": [{"product_id": "5444",
"product_name": "Batterie adaptable pour ordinateur portable Asus X550A 2200mAh",
"product_quantity": "1",
"product_reference": "null"},
{"product_id": "5433",
"product_name": "Batterie originale pour ordinateur portable Asus K52 4400mAh",
"product_quantity": "1",
"product_reference": "null"}]}
这是我的尝试
void addorders(String id , String id_adresse,String secure_key,String id_carrier,String paiement,double total,double total_product,double total_shipping,double tax, List products) async {
final prefs = await SharedPreferences.getInstance();
final key = 'token';
final value = prefs.get(key ) ?? 0;
String myUrl = "$serverUrl/orders";
final String prod=products.toString();
http.post(myUrl,
headers: {
'Accept':'application/json',
//"content-type": "application/json",
'Authorization' : 'JWT $value'
},
body: {
"id_customer":"$id",
"id_adresse":"$id_adresse",
"id_carrier":"$id_carrier",
"secure_key":"$secure_key",
"payment":"$paiement",
"total_paid":"$total",
"total_product":"$total_product",
"total_shipping":"$total_shipping",
"tax":"$tax",
"products":"$prod",
}).then((response){
// print('Response status : ${response.statusCode}');
print('Response body ');
print(response.request);
// print('Response body : ${id_carrier}');
}
);
}
我使用String encoded = json.encode(theMap),但是同样的问题,我的api不读取列表产品。
你应该使用转换器来获得dart类,它可以计算你的json数据并处理它,而不是像你这样传递你的值。
你可以使用这个 JSON到Dart 比如说,你只需要从postman中粘贴你的json数据就可以得到你的dart类。你只需要从postman中粘贴你的json数据,就可以得到你的dart类。
之后,你只需要拨打 toJson()
方法来获取请求主体的地图。