use axum::Json;
use axum::extract::Request;
use axum::http::header::HeaderMap;
use axum::http::StatusCode;
use serde::{Serialize, Deserialize};
use serde_json::{Value, json};
#[derive(Deserialize)]
pub struct Info {
name: String,
age: u8,
}
pub async fn post_foo(info:Json<Info>, header: HeaderMap) -> Result<Json<Value>, StatusCode> {
let body = info;
println!("name:{:?}, apge:{}, {header:?}", body.name, body.age);
// 返回包含请求信息的 JSON 响应
Ok(Json(json!({"data": 42})))
}
.route("/foo", get(api::get_foo).post(api::post_foo))
各位好,我用rust的axum进行学习,现在有个问题,我提供的代码 第一个函数传了2个参数,一个是info,一个是header,问题是:第一个info加上后没问题,但函数如果加上第二个参数 下边一行.route中的api::post_foo就会报错,如果我把两个参数任意一个参数去掉,都不会报错。所以我就不知道该怎么办了,我其实是想拿到post的json数据,以及查看header,甚至想看request的一些数据。现在不知道怎么解决,还清各位大佬指点迷津,谢谢
补充: 我打该明白 因为两个参数类型一样,所以不让传,但有些时候,我需要获取request里的一些数据,做验证,以及使用用户传过来的参数做有业务,那么如何可以同时获取这些数据呢?求教大佬,找了好多资料都找不到,也可能是我能力还比较差,看不懂文档,请各位大佬帮助
handler function
最后一个参数必须实现了
FromRequest
, 其它参数需要实现了FromRequestParts
.翻一下文档就知道,
HeaderMap
实现了FromRequestParts
,而Json<T>
实现了FromRequest
。Request<Body>
也是实现了FromRequest
,所以没法跟Json<T>
一块用。