我有一个案例需要对传入的 JSON 执行一些类型转换。不同的客户端以不同的类型发送几乎相同的数据:
{"amount": 49.90}
{"amount": "49.90"}
我的结构和处理程序:
struct Amount {
pub amount: f64,
}
pub async fn amount(
amount: ValidatedJson<Amount>
) -> Result<HttpResponse, AppError> {
let amount: Amount = amount.to_inner();
...
}
当我尝试执行 JSON 来构造序列化时,会发生反序列化错误。
我尝试使用 serde_json 序列化原始正文,但没有弄清楚如何正确进行存在检查和错误处理,所以我坚持:
let body: String = String::from_utf8(bytes.to_vec()).map_err(|e| {
// logs
})?;
let body: Value = serde_json::from_str(body.as_str()).map_err(|e| {
// logs
})?;
let body = body.as_object().unwrap();
let amount: f32 = body.get("amount")?.as_f64()?;
这只能在夜间使用中完成try_trait
。我认为这是一种愚蠢的方式。
我有哪些选择?我正在使用 Rust 1.43 和 actix-web 2.0.0。