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

如何在Rust的Rocket框架中从Form中解封装结构体数据

Rocket中解封装Form类型获取内部结构体实例的方法

Rocket的Form<T>是一个透明封装器,你可以通过以下几种方式获取内部的MyStructForm实例:

  • 使用.into_inner()方法(官方推荐)
    这个方法会消耗Form实例,直接返回内部的结构体:
#[post("/an/url", data="<input>")]
pub fn post_an_url(input: Form<MyStructForm>) -> Result<Json<u32>, String> {
    let my_struct = input.into_inner();
    // my_struct 现在是 MyStructForm 类型,可直接操作其字段
    Ok(Json(my_struct.item2))
}
  • 模式匹配解构
    通过模式匹配可以直接取出内部结构体,支持消耗或借用两种方式:
#[post("/an/url", data="<input>")]
pub fn post_an_url(input: Form<MyStructForm>) -> Result<Json<u32>, String> {
    // 消耗Form实例,获取所有权
    let Form(my_struct) = input;
    // 如果只需借用,可写成 let Form(ref my_struct) = input;
    Ok(Json(my_struct.item2))
}
  • 直接访问字段(无需显式解封装)
    因为Form<T>实现了Deref trait,你可以直接通过input访问内部结构体的字段,无需手动解封装:
#[post("/an/url", data="<input>")]
pub fn post_an_url(input: Form<MyStructForm>) -> Result<Json<u32>, String> {
    // 自动解引用到MyStructForm,直接访问字段
    Ok(Json(input.item2))
}

内容的提问来源于stack exchange,提问作者FabienM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:29:55