You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:27:34