筛选swagger中的API部件

r8xiu3jd  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(117)

我有一个REST API和SpringFox Swagger V2. 6. 1包含并正在工作。但是现在,我不想总是显示我拥有的所有控制器,因为其中一些非常技术性,不适合普通用户,但是我希望能够选择我显示的内容而不必重新编译代码。(/v2/api-docs)'(或任何你配置它的),只有这一个条目。我的直觉是,它应该有可能有多个选项,并根据选项显示某些控制器类或不。
因为我不太会上传图片,所以不能提供截图,希望我的问题已经问清楚了。
在我的项目中,执行昂首阔步的代码是最简单的:

@Bean
public Docket api() {

    return new Docket( DocumentationType.SWAGGER_2 )
            .select()
                .apis( RequestHandlerSelectors.any() )
                .paths( PathSelectors.any() )
                .build()
            .apiInfo( metadata() );
}

private ApiInfo metadata() {
    return new ApiInfoBuilder()
            .title( "My awesome ACS API" )
            .description( "All the requests that the server will respond to." )
            .version( "1.0.0" )
            .build();
}

我尝试了几种方法,比如添加一些属性、执行两个.select()和选择不同的内容,但是我似乎并没有真正接近我希望实现的目标。
谢谢你的帮助!

vnzz0bqm

vnzz0bqm1#

我能想到的一些选择
1.您可以使用SpringSecurity为不同的端点添加身份验证,并使端点完全不可访问(但在Swagger UI中可见)。
1.您在顶部提到的下拉菜单可以配置如下

@Bean
public Docket orderApi() {
    // This will group the endpoints strting with /order.   
    // And it will be visible as a separate group in the drop down(In Swagger UI) 
    // with the name 'order' as specified in the groupName(..)
    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("order")
            .apiInfo(metadata())
            .select()
            .paths(PathSelectors.ant("/order/**"))
            .build();
}

@Bean
public Docket orderValidationApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("product")
            .apiInfo(metadata())
            .select()
            .paths(PathSelectors.ant("/product/**"))
            .build();
}

1.您可以在Docker配置中使用类似这样的设置完全排除端点在Swagger UI中的可见性

return new Docket( DocumentationType.SWAGGER_2 )
        .select()
            .apis( RequestHandlerSelectors.any() )
            .paths(PathSelectors.regex("(?!/error).+")).paths(PathSelectors.regex("(?!/product).+"))
            .build()
        .apiInfo( metadata() );

这将使所有不是/error和/product的终结点都可用。您可以像这样筛选出终结点。

ma8fv8wu

ma8fv8wu2#

您还可以提供包名称

@Bean
public Docket api() {

    return new Docket( DocumentationType.SWAGGER_2 )
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.hello.world.controller.user"))
            .paths( PathSelectors.any() )
            .build()
            .apiInfo( metadata() );
}

也可以为API类或API方法使用自定义Annotation,如下所示:

@Bean
public Docket api() {

    return new Docket( DocumentationType.SWAGGER_2 )
            .select()
            .apis(RequestHandlerSelectors.withClassAnnotation(MyCustomClassAnnotation.class))
            .paths( PathSelectors.any() )
            .build()
            .apiInfo( metadata() );
}

@Bean
public Docket api() {

    return new Docket( DocumentationType.SWAGGER_2 )
            .select()
            .apis(RequestHandlerSelectors.withMethodAnnotation(MyCustomMethodAnnotation.class))
            .paths( PathSelectors.any() )
            .build()
            .apiInfo( metadata() );
}
0lvr5msh

0lvr5msh3#

"隐藏的注解“对我起作用了。

@GetMapping("/ping")
@Hidden
public String ping() {

相关问题