【问题标题】:Swagger overwrites methods with the same path and method but different parametersSwagger 覆盖路径和方法相同但参数不同的方法
【发布时间】:2021-03-05 15:19:17
【问题描述】:

Swagger 覆盖路径和方法相同但参数不同的方法

我有一个带有 Spring Boot 2.3.5.RELEASE、webflux 和 springfox 3.0.0 的应用程序。我开发了两种路径相同但参数不同的 GET 方法,一种不接收参数并返回列表,另一种用于 findAll。

情况是 Swagger 只生成其中一种方法的文档,有时是列表,有时是分页。我如何才能告诉 swagger 它们是不同的方法并为我记录两者?

我的控制器代码:

@GetMapping(value = "/foo", params = {"page", "size"})
@ResponseBody
public Mono<ResponseEntity<Mono<Page<FooDTO>>>> findByFilter(FooFilterDTO filter,
        @SortDefault(sort = "id", direction = Sort.Direction.DESC) @PageableDefault(value = 10) Pageable pageable) {
//...
}

@GetMapping(value = "/foo")
@ResponseBody
public Mono<ResponseEntity<Flux<FooDTO>>> findAll() {
//...
}

我的 Swagger 配置:

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Value("${app.version}")
    private String version;
    
    @Bean
    public Docket docketUsersV1() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(this.fooApiInfo())
                .enable(true)
                .groupName("foo-api")
                .securityContexts(Arrays.asList(securityContext()))
                .securitySchemes(Arrays.asList(apiKey()))
                .select()
                .paths(fooPaths())
                .build();
    }
    
    private ApiInfo fooApiInfo() {
        return new ApiInfoBuilder()
                .title("Reactive Foo")
                .description("Reactive API")
                .version(appVersion)
                .build();
    }

    
    private Predicate<String> fooPaths() {
        return regex("/foo.*");
    }
}

【问题讨论】:

    标签: spring-boot swagger spring-webflux springfox


    【解决方案1】:

    据我所知,每个 HTTP 动词(GET、POST...)只能定义一个 API 路径,与 API 使用者发送的可选参数无关。

    我的建议是定义一个 GET /foo 路径,带有可选参数 pagesize(即不需要)

    然后我将在控制器中有一个入口点函数,然后重定向到每个 findByFilter 私有方法或 findAll 私有方法,具体取决于是否定义了 pagesize

    【讨论】:

    • 我很想写一些代码来表达我的观点,但是虽然我有一些使用 OpenAPI (Swagger) 的经验,但我从未使用过 Spring。
    • 嗨,这就是我最终所做的。 Spring 允许您在同一路径和 HTTP 方法下定义多个 java 方法,并设置条件来选择使用哪一个。最后,我必须将这两种方法统一起来,并根据参数检索列表或页面。谢谢。
    猜你喜欢
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2023-03-12
    • 2020-02-28
    相关资源
    最近更新 更多