如何用 actix-web 的 Json 类型解析 "implementation of serde::Deserialize is not general enough"?
How do I resolve "implementation of serde::Deserialize is not general enough" with actix-web's Json type?
我正在使用 actix-web 编写服务器:
use actix_web::{post, web, Responder};
use serde::Deserialize;
#[derive(Deserialize)]
struct UserModel<'a, 'b> {
username: &'a str,
password: &'b str,
}
#[post("/")]
pub fn register(user_model: web::Json<UserModel>) -> impl Responder {}
编译器报错:
error: implementation of `user::_IMPL_DESERIALIZE_FOR_UserModel::_serde::Deserialize` is not general enough
--> src/user.rs:31:1
|
31 | #[post("/")]
| ^^^^^^^^^^^^
|
= note: `user::UserModel<'_, '_>` must implement `user::_IMPL_DESERIALIZE_FOR_UserModel::_serde::Deserialize<'0>`, for any lifetime `'0`
= note: but `user::UserModel<'_, '_>` actually implements `user::_IMPL_DESERIALIZE_FOR_UserModel::_serde::Deserialize<'1>`, for some specific lifetime `'1`
我该如何解决?
来自the actix-web
documentation:
impl<T> FromRequest for Json<T>
where
T: DeserializeOwned + 'static,
它基本上是说,如果您希望 actix-web
为您从请求中提取类型,则只能使用拥有的,而不是借用的 Json
类型的数据。因此你必须在这里使用 String
:
use actix_web::{post, web, Responder};
use serde::Deserialize;
#[derive(Deserialize)]
struct UserModel {
username: String,
password: String,
}
#[post("/")]
pub fn register(user_model: web::Json<UserModel>) -> impl Responder {
unimplemented!()
}
我正在使用 actix-web 编写服务器:
use actix_web::{post, web, Responder};
use serde::Deserialize;
#[derive(Deserialize)]
struct UserModel<'a, 'b> {
username: &'a str,
password: &'b str,
}
#[post("/")]
pub fn register(user_model: web::Json<UserModel>) -> impl Responder {}
编译器报错:
error: implementation of `user::_IMPL_DESERIALIZE_FOR_UserModel::_serde::Deserialize` is not general enough
--> src/user.rs:31:1
|
31 | #[post("/")]
| ^^^^^^^^^^^^
|
= note: `user::UserModel<'_, '_>` must implement `user::_IMPL_DESERIALIZE_FOR_UserModel::_serde::Deserialize<'0>`, for any lifetime `'0`
= note: but `user::UserModel<'_, '_>` actually implements `user::_IMPL_DESERIALIZE_FOR_UserModel::_serde::Deserialize<'1>`, for some specific lifetime `'1`
我该如何解决?
来自the actix-web
documentation:
impl<T> FromRequest for Json<T>
where
T: DeserializeOwned + 'static,
它基本上是说,如果您希望 actix-web
为您从请求中提取类型,则只能使用拥有的,而不是借用的 Json
类型的数据。因此你必须在这里使用 String
:
use actix_web::{post, web, Responder};
use serde::Deserialize;
#[derive(Deserialize)]
struct UserModel {
username: String,
password: String,
}
#[post("/")]
pub fn register(user_model: web::Json<UserModel>) -> impl Responder {
unimplemented!()
}