已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
上个月关门了。
Improve this question
我正在尝试用serde把一个对象转换成json,这样我就可以把它发布到reqwest了。然而,当我做我认为我必须做的事情时,它似乎并没有变成正确的json。
我有一个结构Order:
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Order {
#[serde(rename = "Uic")]
uic: i64,
#[serde(rename = "BuySell")]
buy_sell: String,
#[serde(rename = "AssetType")]
asset_type: String,
#[serde(rename = "Amount")]
amount: i64,
#[serde(rename = "OrderType")]
order_type: String,
#[serde(rename = "OrderRelation")]
order_relation: String,
#[serde(rename = "ManualOrder")]
manual_order: bool,
#[serde(rename = "AccountKey")]
account_key: String,
}
我序列化并尝试发布到一个API。当我尝试将其发送到API时,我可以在API上看到(实时API返回无效的主体,因此我使用Postman Mock Server来测试API调用)正在发送的主体
{
{
key: "{"Uic":16,"BuySell":"Buy","AssetType":"FxSpot","Amount":1000,"OrderType":"Market","OrderRelation":"StandAlone","ManualOrder":false,"AccountKey":"GfCSX|cXT0uDkDakbet8NQ"
value: "="}"
}
}
我是这样发送的:
let body = serde_json::to_string(&order).unwrap();
let order_id = client
.post(url)
.headers(headers)
.bearer_auth(access_token)
.body(body)
.send()
.await?
.text()
//.json::<OrderPlacementResponse>()
.await?
;
let mut file = std::fs::File::create("order.json")?;
serde_json::to_writer_pretty(&mut file, &order)?;
最后,我保存它到一个文件,它看起来像:
{
"Uic": 16,
"BuySell": "Buy",
"AssetType": "FxSpot",
"Amount": 1000,
"OrderType": "Market",
"OrderRelation": "StandAlone",
"ManualOrder": false,
"AccountKey": "GfCSX|cXT0uDkDakbet8NQ=="
}
看上去就应该是这样。如果我使用Postman将这个body发送到URL,我会得到正确的响应。所以错误肯定是在我如何制作身体上。我就是不知道怎么补救。
1条答案
按热度按时间k2arahey1#
order
变量真的是Order
吗?content-type: application/json
是你使用的头文件的一部分吗?我的第一个猜测是,你实际上正确地序列化了主体,但你没有告诉另一端它是json,所以Postman把整个主体放在它自己发明的外部json中。
尝试在代码中的一些有趣的地方添加
dbg!(...)
,以了解它的更多功能,如下所示:现在你可以看到body是否看起来像它应该的那样,以及header是否包含正确的内容类型。