问题就在这里。我正在使用 utoipa 生成文档。我想按组划分路线。例如,在 axum 中我们可以做这样的事情,它会正常工作:
//main.rs
Router::new().route("/user", Router::new().route("/test1", test_handler_1)
.route("/test2", test_handler_2)
.route("/test3", test_handler_3))
因此,我可以访问所有这些路由,即使它们具有相同的方法(以 POST/GET 为例)。
但在utoipa,由于某种原因我不能这样做。在我的项目中,我将所有路由组拆分为不同的文件,例如
user_handler
、product_handler
,并创建了返回 OpenApiRouter
(user_routes、product_routes)的函数。
//product_handler.rs
pub fn product_routes() -> OpenApiRouter<Arc<Pool>> {
OpenApiRouter::new()
.routes(routes!(
...
post_product,
post_product_type,
...
))
}
//main.rs
OpenApiRouter::with_openapi(ApiDoc::openapi()).nest("/products", product_routes())
但是..我得到了
Overlapping method route. Cannot add two method routes that both handle 'POST' (or GET) note: run with 'RUST_BACKTRACE=1' environment variable to display a backtrace
有什么建议吗?预先感谢!
目前只有一种解决方案可用:
...
OpenApiRouter::new()
.routes(routes!(get_1))
.routes(routes!(get_2))
.routes(routes!(get_3))
...
最主要的是:axum 专门为独特方法创建的路由(每个路由只能指定一个
post
和 get
)。所以,享受这个解决方案吧! =)