首页 > 解决方案 > 如何使用 actix-web 的 Form 类型解决“serde::Deserialize 的实现不够通用”?

问题描述

我正在使用actix-web. 我的端点之一尝试将传入数据反序列化为表单结构:

#[get("/tweets4")]
async fn tweets4(form: web::Form<TweetParams<'_>>) -> HttpResponse {
    println!("{} {} {}", form.page, form.sort_by, form.timeframe);
    HttpResponse::Ok().body("worked")
}

#[derive(serde::Deserialize, serde::Serialize, Debug)]
struct TweetParams<'a> {
    page: &'a str,
    sort_by: &'a str,
    timeframe: &'a str,
}

我得到的错误:

error: implementation of `_::_serde::Deserialize` is not general enough
  --> src/main.rs:82:1
   |
82 | #[get("/tweets4")]
   | ^^^^^^^^^^^^^^^^^^ implementation of `_::_serde::Deserialize` is not general enough
   |
   = note: `TweetParams<'_>` must implement `_::_serde::Deserialize<'0>`, for any lifetime `'0`...
   = note: ...but `TweetParams<'_>` actually implements `_::_serde::Deserialize<'1>`, for some specific lifetime `'1`
   = note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info)

我对破译错误及其可能意味着什么感到很困惑。听起来编译器对 Serde 的开箱即用Deserialize实现不满意 - 但我该如何解决呢?

&str当我从结构内部切换到时出现此错误String

标签: rustactix-webrust-actix

解决方案


推荐阅读