Rocket Request
GET
-
添加
get过程宏,并使用<xxx>, 指定请求参数#[get("/hello/<name>/<age>/<cool>")] fn hello(name: &str, age: u8, cool: bool) -> String { if cool { format!("You're a cool {} year old, {}!", age, name) } else { format!("{}, we need to talk about your coolness.", name) } } -
通过
<xxx...>指定 list 参数use std::path::PathBuf; #[get("/page/<path..>")] fn get_page(path: PathBuf) { /* ... */ } -
通过
routes!,注册路由rocket::build() .mount("/", routes![index]) .mount("/base", routes![get_exs, get_ex, post_ex, put_ex, delete_ex])
POST
-
添加
post过程宏,并使用data = <xxx>, 指定body data。xxx必须实现FromDatatrait# [post("/", data = "<input>")] fn new(input: T) { /* .. */ } -
也可以使用
JSON作为 body datause rocket::serde::{Deserialize, json::Json}; #[derive(Deserialize)] #[serde(crate = "rocket::serde")] struct Task<'r> { description: &'r str, complete: bool } #[post("/todo", data = "<task>")] fn new(task: Json<Task<'_>>) { /* .. */ }
JSON
-
在
Cargo.toml中添加json feature.rocket = { version = "=0.5.0-rc.3", features = ["json"] } -
引入 Rocket 中的 json crate
use rocket::serde::json::serde_json::json; use rocket::serde::json::{Json, Value}; use rocket::serde::{Deserialize, Serialize}; -
创建结构体,并序列化
#[derive(Serialize, Deserialize)] #[serde(crate = "rocket::serde")] struct Person<'a> { id: usize, name: &'a str, age: u8, } -
通过
Json结构体 或json!, 创建Json#[get("/")] fn index<'a>() -> Json<Person<'a>> { Json(Person { id: 0, name: "Tome", age: 9, }) } #[get("/ex/<id>")] async fn get_ex(id: usize) -> Value { json!(Person { id, name: "Joy", age: 10 }) } -
完整代码参考: github.com/panmin-code…