如何在Rocket.rs中将Json<T<'_>>转换为结构体对象?
解决方案
要将Json<Task<'_>>中的Task结构体对象传递给db.add_task(),你需要调用Rocket提供的into_inner()方法来提取包装器内部的Task实例:
#[post("/task/new", data = "<task>")] async fn add_task(task: Json<Task<'_>>, db: &State<DB>) -> Result<Json<Task<'_>>, std::io::Error> { let task = db .add_task(task.into_inner()) // 调用into_inner()获取Task对象 .await .map_err(|_| std::io::Error::new(ErrorKind::Other, "Unable to create task."))?; Ok(Json(task)) }
关键说明
- Rocket的
Json<T>是用于自动解析JSON请求体的包装类型,into_inner()方法专门用来取出其中包裹的原始T类型实例(也就是你的Task结构体)。 - 你的
Task结构体使用生命周期引用的写法没问题,'_会让编译器自动推导合适的生命周期,只要db.add_task()能接受带生命周期的Task<'_>参数即可。 - 补充:你的函数缺少返回值类型声明,必须加上
-> Result<Json<Task<'_>>, std::io::Error>才能通过编译。
内容的提问来源于stack exchange,提问作者user12828000
相关产品推荐
相关产品推荐

