Axum处理函数的参数是否需要遵循固定顺序?
Axum处理函数的参数是否需要遵循固定顺序?
嘿,其实Axum的处理函数参数根本不需要遵循固定顺序哦!
Axum是靠**提取器(Extractor)**来解析请求里的不同数据部分的,像你代码里用到的State、Json、Extension这些,都是实现了FromRequest trait的提取器。Axum会自动识别每个提取器对应的请求数据,不管你把它们放在参数列表的哪个位置,都能正确拿到对应的值。
举个例子,你把代码里的参数顺序调换一下,写成这样也完全能正常工作:
pub async fn add_task<T: TaskService>( Extension(claims): Extension<auth::AccessClaims>, Json(task): Json<TaskPayload>, State(app): State<TaskState<T>>, ) -> APIResult<Json<Task>> { let task = app.task_service.add_task(/* 你的业务参数 */).await?; Ok(Json(task)) }
不过要提一句,要是你的自定义提取器之间存在明确的依赖关系(比如某个提取器需要先拿到另一个提取器的结果才能工作),那可能需要调整顺序,但这种情况比较少见。咱们常用的那些内置提取器,比如State、Json、Extension都是相互独立的,完全可以按照自己觉得舒服的顺序来排列,怎么可读性高怎么来就行~
备注:内容来源于stack exchange,提问作者Simone Samardzhiev
相关产品推荐
相关产品推荐

