当前位置: 首页 > 知识库问答 >
问题:

Spring WebFlux 功能路由器 OpenAPI UI

程亦
2023-03-14

我想创建OpenAPI UI规范,在静态编程语言上使用Spring WebFlux功能路由器。Spring Boot v.2.5.2,springdoc-openapi v.1.5.9。这是我的路由器类:

@Configuration
class UserServiceRouter {

    @Bean
    @RouterOperations(
        RouterOperation(
            path = "/user/{id}",
            method = [RequestMethod.GET],
            beanClass = UserService::class,
            beanMethod = "getUserCredentialsById",
        operation = Operation(
            parameters = [Parameter(
                style = ParameterStyle.SIMPLE,
                explode = Explode.FALSE,
                `in` = ParameterIn.PATH
            )]
        )
        ),
        RouterOperation(
            path = "/user/profile/{id}",
            method = [RequestMethod.GET],
            beanClass = UserService::class,
            beanMethod = "getUserProfileById",
        operation = Operation(
            parameters = [Parameter(
                style = ParameterStyle.SIMPLE,
                explode = Explode.FALSE,
                `in` = ParameterIn.PATH
            )]
        )
    )
    fun userRoute(userServiceHandler: UserServiceHandler) = coRouter {
        ("/user").nest {
            GET("/{id}", userServiceHandler::getUserCredentialsById)
            GET("/profile/{id}", userServiceHandler::getUserById)
        }
    }
}

我想创建一个 GET 查询,如

http://localhost:8080/user/1

其中1是我想要的用户ID。

但我的OpenAPI的UI仍然尝试使用GET参数创建查询

http://localhost:8080/user/{id}?id=1

这显然会导致错误400。很高兴知道我的@RouterAction应该如何正确配置。

共有1个答案

扶高歌
2023-03-14

路径变量的正确配置如下所示(为了简洁起见,我在这里只留下了一个GET查询):

@Bean
@RouterOperations(
    RouterOperation(
        path = "/user/{id}",
        method = arrayOf(RequestMethod.GET),
        beanClass = UserService::class,
        beanMethod = "getUserCredentialsById",
        operation = Operation(
            operationId =  "getUserCredentialsById",
            method = "GET",
            parameters = [
                Parameter(
                    name = "id",
                    `in` = ParameterIn.PATH,
                    style = ParameterStyle.SIMPLE,
                    explode = Explode.FALSE,
                    required = true
                )]
        )
    )
)
fun userRoute(userServiceHandler: UserServiceHandler) = coRouter {
    path("/user")
        .nest {
            GET("/{id}", userServiceHandler::getUserCredentialsById)
        }
}

请点击此处查看规格。要点:

    < li >操作ID是必需的 < Li > < code > Operation < code > parameters[]中的默认值是“查询参数”而不是“路径参数”,我们应该显式地指向参数名称(< code>name = "id"),以便覆盖默认行为。 < li >如问题中所述,< code >参数in。PATH也是必需的。
 类似资料:
  • 路由功能浅谈 在本章 选择恰当的分片数量和分片副本数量 一节中,已经提到使用路由功能可以只在一个分片上执行查询命令,作为提高系统吞吐量的一种解决方案。接下来作者将详细地介绍这一功能。 分片和分片中数据 通常情况下,ElasticSearch是如何把数据分发到各个分片中,哪个分片存储哪一类的文档等细节并不重要。因为查询时,将查询命令分发到每个分片就OK了。唯一的关键点在于算法,将数据均等地分配到各个

  • 本文向大家介绍JS实现简单路由器功能的方法,包括了JS实现简单路由器功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现简单路由器功能的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 我是否可以使用新的Kotlin DSL设置路由,例如: 是否使用非反应web部件?因为底层数据库将是Postgres和非反应性的基于servlet的应用服务器,所以我不想/不需要使用Flux或Mono来返回类型或存储库函数。但我喜欢新的路由器DSL与Kotlin一起使用,它比基于注释的功能更强大,更容易掌握所有的应用程序路由。

  • anu可以完美与react-router搭配使用。 但强烈建议使用reach router, 这个比react router更好用。 anujs也对它进行改造,让它支持IE8的hashchange reach的官网 https://reach.tech/router resolve: { alias: { react: "anujs", "react-dom":

  • 添加一个自定义的路由器 $prepend = false; Swoole::$php->addRouter(new App\MyRouter, $prepend); 第一个参数为路由器对象,必须实现Swoole\IFace\Router接口 第二个参数如果为true,表示添加到路由表的起始位置,默认为false,表示追加到末尾 底层默认添加了2个路由器Swoole\Router\Rewrite和

  • 路由闭包 绝不 在路由配置文件里书写『闭包路由』或者其他业务逻辑代码,因为一旦使用将无法使用 路由缓存 。 路由器要保持干净整洁,绝不 放置除路由配置以外的其他程序逻辑。 Restful 路由 必须 优先使用 Restful 路由,配合资源控制器使用,见 文档。 超出 Restful 路由的,应该 模仿上图的方式来定义路由。 resource 方法正确使用 一般资源路由定义: Route::res