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

Axum中返回StatusCode的async函数为何未实现Handler trait

报错根本原因

你在注册路由时错误地给handler函数加了调用括号,把函数执行的返回值传给了路由方法,而非函数本身。

看你出错的代码行:

Router::new().route("/webhook", post(webhook_handler()))

这里webhook_handler()带了括号,意味着你在构建路由的当下就执行了这个async函数,把它返回的impl Future<Output = StatusCode>实例传给了post()方法。

而Axum的post/get等路由方法,要求传入的参数是实现了Handler trait的处理函数/闭包本身:

  • 不带括号的webhook_handler是async函数项类型,本身已经实现了对应版本的Handler trait,符合参数要求,这也是官方示例的正确写法
  • 带括号调用后得到的Future对象,并没有实现Handler trait,因此编译器抛出trait约束不满足的错误。
修复方式

去掉handler名后面的括号,直接传入函数本身即可:

pub fn create_routes() -> Router {
    Router::new().route("/webhook", post(webhook_handler))
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:48:23