Интеграция WebFlux Swagger (Open API) - образец Post Request

Я интегрировал Swagger (OpenAPI) с Spring Webflux, как упоминалось здесь: https://springdoc.org/#spring-weblfuxwebmvcfn-with-functional-endpoints с использованием RouterOperation. Интеграция работает нормально и доступна по адресу /swagger-ui.html.

Однако для API POST я не вижу образец запроса, когда нажимаю кнопку «Попробовать». My Post API принимает Json в качестве тела запроса.

Как мне это настроить? Можно ли это сделать с помощью аннотаций вместе с RouterOperation или чем-то еще?

Изменить: ниже мой код класса маршрутизатора:

@Configuration
public class  MyRouter {

    @RouterOperations({
            @RouterOperation(path = "/data", beanClass = MyHandler.class, beanMethod = "getData"),
            @RouterOperation(path = "/allData", beanClass = MyHandler.class, beanMethod = "getAllData") })

    @Bean
    public RouterFunction<ServerResponse> route(MyHandler MyHandler) {

        return RouterFunctions
                .route(RequestPredicates.POST("/data").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), MyHandler::getData)
                .andRoute(RequestPredicates.GET("/allData").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), MyHandler::getAllData);
    }
}

После добавления аннотации RouterOperations я вижу, что swagger-ui правильно отображает API GET и POST, но не образец схемы запроса.

Я также наткнулся на файл yaml / json, чтобы описать это. Но я не понимаю, где разместить этот файл в своем приложении, чтобы swagger-ui использовал его.


person Ronnie    schedule 21.07.2020    source источник
comment
Не могли бы вы поделиться кодом. У нас нет возможности выяснить, не хватает ли чего-нибудь   -  person Abhinaba Chakraborty    schedule 21.07.2020
comment
@AbhinabaChakraborty Добавлен рассматриваемый код   -  person Ronnie    schedule 22.07.2020


Ответы (1)


Наконец нашел это

Используя @Operation и @Schema, можно определить класс, который требуется в качестве входных данных в теле запроса. Это будет показано как образец структуры json в Swagger-ui. Никакой другой конфигурации не требуется.

@RouterOperations({
            @RouterOperation(
                    path = "/data", beanClass = MyHandler.class,  beanMethod = "getData",
                    operation = @Operation(
                            operationId = "opGetData",
                            requestBody = @RequestBody(required = true, description = "Enter Request body as Json Object",
                                                content = @Content(
                                                        schema = @Schema(implementation = ApiRequestBody.class))))),
            @RouterOperation(path = "/allData", beanClass = MyHandler.class, beanMethod = "getAllData")})

@Bean
    public RouterFunction<ServerResponse> route(MyHandler myHandler) {

        return RouterFunctions
                .route(RequestPredicates.POST("/data").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), myHandler::getData)
                .andRoute(RequestPredicates.GET("/allData").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), myHandler::getAllData);
    }
person Ronnie    schedule 23.07.2020
comment
Некоторые из моих функций маршрутизатора + конечные точки генерируются динамически при запуске приложения на основе некоторой конфигурации, есть ли способ программно создать @RouterOperations для их описания? - person Vladimir; 08.03.2021