rust - 如何使用 actix-web 的 Json 类型解决“serde::Deserialize 的实现不够通用”?
问题描述
我正在使用 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`
我应该如何解决这个问题?
解决方案
impl<T> FromRequest for Json<T>
where
T: DeserializeOwned + 'static,
Json
它基本上说,如果您想actix-web
从请求中提取类型,您只能使用拥有的数据,而不是借用的数据。因此你必须在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!()
}
推荐阅读
- python - 如何在python中注释掉一行代码?
- spring - Spring TransactionManager 行为与 Spring Data 和 JpaRepository
- javascript - 使用 WP 辅助功能插件的 Wordpress 验证错误
- flutter - 使用 photo_view 包来适应像 BoxFit.cover 这样的图像
- sql - 动态调整最近 5 天的生产
- python-3.x - 如何防止 GCP Vertex 从我的 docker run 中丢失日志?
- angular - 如何使用 angular、firebase 实现无密码登录身份验证并将电子邮件存储在 mongodb-stitch 中?
- javascript - 如何将对象传递给formick表单
- flutter - Firebase rules/secure in collectionGroup use if state
- windows - Delphi 库例程 IsUNCRooted 和 IsUNCPath 有什么区别?