rust axum 接口传参问题?-灵析社区

我头像最美

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, header: HeaderMap) -> Result, 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里的一些数据,做验证,以及使用用户传过来的参数做有业务,那么如何可以同时获取这些数据呢?求教大佬,找了好多资料都找不到,也可能是我能力还比较差,看不懂文档,请各位大佬帮助

阅读量:170

点赞量:0

问AI
"handler function" (https://link.segmentfault.com/?enc=jnZzDOFy9eKrVQ9qkf7wrA%3D%3D.9OJ%2FrGfFmFIrcdIXeCAgPxbQKpH8cF7f371T22%2FZhSNaoEKsXrG0RNKjzDYqMYMT239mircEn6Pz3wC1NzssbswajNr7Yuq8aZSPfDjpqz4zh%2FzgyN8sWkBJ%2F0VUH%2Bam) «For a function to be used as a handler it must implement the Handler trait. axum provides blanket implementations for functions that:* Are async fns. * Take no more than 16 arguments that all implement Send. * All except the last argument implement FromRequestParts. * The last argument implements FromRequest. * Returns something that implements IntoResponse. * If a closure is used it must implement Clone + Send and be 'static. * Returns a future that is Send. The most common way to accidentally make a future !Send is to hold a !Send type across an await.» 最后一个参数必须实现了 ""FromRequest"" (https://link.segmentfault.com/?enc=u9Wo9N8sVL1bAATJIB1IMw%3D%3D.%2FXoMUmOIJSUNBwF68NedB7Rn7PVFpjF1fzUS5uyv4UR2uGds7kdY8mIRyxvdF7secEJ5umGDJVqtsY%2BRlDtsjA%3D%3D), 其它参数需要实现了 ""FromRequestParts"" (https://link.segmentfault.com/?enc=8%2FUsiG9HiLTGdr9F0XJ0iA%3D%3D.0NZW%2FFheB0jLboEk24ZwiTHc3WLmiI90bUSlTRcY%2FQ3j0qlMaMwRrhRFfCSjQTvvLvhzLomeicoRFgTRBd3jFJvub4rkc9VVI%2B1EPo5LSIw%3D). 翻一下文档就知道,"HeaderMap" 实现了 "FromRequestParts" ,而 "Json" 实现了 "FromRequest" 。"Request" 也是实现了 "FromRequest",所以没法跟 "Json" 一块用。