如何将actix-web的web::Json<User>转换为&mut User?
解决方法
要将web::Json<User>转换为&mut User,核心是先获取User实例的所有权,再将其转为可变变量,最后获取可变引用。具体修改如下:
#[post("/users")] pub async fn create_user( db_connector: web::Data<DBConnector>, user: web::Json<User>, ) -> impl Responder { // 从web::Json中取出User实例,获得所有权并转为可变变量 let mut user_data = user.into_inner(); match db_connector.create_user(&mut user_data).await { Ok(_) => HttpResponse::Created().finish(), Err(e) => HttpResponse::InternalServerError().body(e.to_string()), } }
关键说明
web::Json<T>的into_inner()方法会转移内部T实例的所有权,返回一个T类型的值,而不是引用。- 把这个值赋值给
mut修饰的变量后,就可以通过&mut操作符获取它的可变引用,满足create_user()方法的参数要求。 - 这样
create_user()就能在后台修改user_data的字段(比如添加ID、创建日期),因为可变引用允许对实例进行修改。
内容的提问来源于stack exchange,提问作者Rusty
相关产品推荐
相关产品推荐

