WebFlux Swagger(打开 API)集成器 - Post 请求示例
WebFlux Swagger (Open API) integraton - Post Request sample
我已经将 Swagger (OpenAPI) 与 Spring Webflux 集成在一起,如下所述:https://springdoc.org/#spring-weblfuxwebmvcfn-with-functional-endpoints 使用 RouterOperation。集成工作正常,可在 /swagger-ui.html
访问
但是,对于 POST APIs,当我单击“试用”按钮时,我没有看到“请求”示例。我的 Post API 接受 Json 作为请求正文。
我该如何配置?可以通过注释和 RouterOperation 或其他方式来完成吗?
编辑:下面是我的路由器 class 代码:
@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 正确显示 GET 和 POST API,但不是请求模式示例。
我也遇到了 yaml / json 文件来描述这个。但是我不知道把这个文件放在我的应用程序中的什么地方,以便 swagger-ui 使用它。
终于找到了
使用@Operation 和@Schema,可以将required 的class 定义为请求正文中的输入。这将在 Swagger-ui 中显示为示例 json 结构。没有其他配置 required.
@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);
}
我已经将 Swagger (OpenAPI) 与 Spring Webflux 集成在一起,如下所述:https://springdoc.org/#spring-weblfuxwebmvcfn-with-functional-endpoints 使用 RouterOperation。集成工作正常,可在 /swagger-ui.html
访问但是,对于 POST APIs,当我单击“试用”按钮时,我没有看到“请求”示例。我的 Post API 接受 Json 作为请求正文。
我该如何配置?可以通过注释和 RouterOperation 或其他方式来完成吗?
编辑:下面是我的路由器 class 代码:
@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 正确显示 GET 和 POST API,但不是请求模式示例。
我也遇到了 yaml / json 文件来描述这个。但是我不知道把这个文件放在我的应用程序中的什么地方,以便 swagger-ui 使用它。
终于找到了
使用@Operation 和@Schema,可以将required 的class 定义为请求正文中的输入。这将在 Swagger-ui 中显示为示例 json 结构。没有其他配置 required.
@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);
}