springdoc-openapi: как использовать @RouterOperation в coRouter DSL

Я использую springdoc-openapi с Kotlin и WebFlux.fn.
Я хотел использовать аннотацию @RouterOperation на каждом пути в CoRouterFunctionDsl, но не смог.

@Configuration
class UserRouter(private val userHandler: UserHandler) {
    // @RouterOperations annotation works here.
    @Bean
    fun userRouter = coRouter {
        ("/v1").nest {
            // I want to use @RouterOperation annotation here.
            GET("/users", userHandler::getUsers)

            // I want to use @RouterOperation annotation here.
            GET("/users/{userId}", userHandler::getUserById)

            // I want to use @RouterOperation annotation here.
            POST("/users", userHandler::postUser)
        }
    }
}

Похоже, что по этому поводу нет какой-либо соответствующей документации.
Как я могу использовать @RouterOperation в coRouter DSL?


person gumimin    schedule 02.07.2020    source источник


Ответы (1)


Те же принципы применимы к Kotlin DSL (coRouter): компоненты CoRouterFunctionDsl являются экземплярами RouterFunction.

Вот пример синтаксиса:

@FlowPreview
@Bean
@RouterOperations(
        RouterOperation(path = "/test", method = arrayOf(RequestMethod.GET), beanClass = ProductRepositoryCoroutines::class, beanMethod = "getAllProducts"),
        RouterOperation(path = "/test/{id}", method = arrayOf(RequestMethod.GET), beanClass = ProductRepositoryCoroutines::class, beanMethod = "getProductById"))
fun productRoutes(productsHandler: ProductsHandler) = coRouter {
    GET("/test", productsHandler::findAll)
    GET("/test/{id}", productsHandler::findOne)
}
person brianbro    schedule 03.07.2020
comment
Спасибо за ответ. Я знаю, что компоненты CoRouterFunctionDsl являются экземплярами RouterFunction, и я могу добавить к нему аннотацию @RouterOperation. Помимо этого, я хочу добавить аннотацию к функциям построения маршрутов (таким как GET, POST и т. Д.) В coRouter DSL. Если я разделю маршруты на несколько bean-компонентов RouterFunction, я не смогу унифицировать фильтры и обработку ошибок. Поэтому я хочу написать много путей в одном coRouter, используя nest (). - person gumimin; 04.07.2020
comment
Однако, если я пишу документы с аннотацией RouterOperations на одном coRouter, чем больше у вас путей, тем больше становятся аннотации, и трудно понять, какое описание соответствует какой функции HandlerFunction. Поэтому я хочу писать документы с RouterOperation для каждой функции построителя для каждого метода пути в coRouter. Есть ли способ решить эту проблему? - person gumimin; 04.07.2020
comment
Вы можете вместо использования класса bean и метода использовать аннотацию swagger @Operation. - person brianbro; 05.07.2020
comment
Спасибо! Я мог бы добавить аннотацию Operation к функциям обработчика и уменьшить аннотацию RouterOperation. - person gumimin; 07.07.2020
comment
@gumimin Можно ли поделиться примером - person VenoM; 17.06.2021