在Swagger2中隐藏/删除Spring MVC端点

时间:2017-01-31 23:11:58

标签: spring-mvc spring-boot swagger swagger-ui swagger-2.0

我正在使用Swagger 2进行API UI。所以,我的gradle.build有:

compile "io.springfox:springfox-swagger2:${swaggerVersion}"
compile "io.springfox:springfox-swagger-ui:${swaggerVersion}"

我已将Swagger配置如下:

@Configuration
@Profile("!production")
@EnableSwagger2
@ComponentScan(basePackageClasses = com.company.controllers.ContentController.class)
public class SwaggerConfiguration {
    @Autowired
    private BuildInfo buildInfo;

    @Bean
    public Docket awesomeApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(this.awesomeApiInfo())
                .select()
                .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
                .build();

    }

    private ApiInfo awesomeApiInfo() {
        return new ApiInfoBuilder()
                .title("Awesome API - build #" + this.buildInfo.getVersion())
                .description("Enter the IDs in order to look for the content")
                .version("0.1")
                .build();
    }
}

我正在获取我定义的api端点,但也获得了如下的Spring MVC端点:

enter image description here

现在,我需要摆脱这些mvc端点。

非常感谢任何帮助!!

3 个答案:

答案 0 :(得分:8)

噢......实际上这是我的愚蠢错误。我更改了RequestHandlerSelectors以从我自己的控制器包中仅选择端点,如下所示:

 @Bean
    public Docket awesomeApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(this.awesomeApiInfo())
                .select()
                .paths(PathSelectors.any())
                .apis(RequestHandlerSelectors.basePackage("com.company.awesome.controllers"))
                .build();

    }

这仅显示controller包中的类中映射的端点。

答案 1 :(得分:1)

您可以遵循的最佳方法是限制对ServiceStack的可见性和访问权限。因此,您可以通过以下方式隐藏它在外部可见:

[Restrict(VisibleInternalOnly = true)]
public class InternalAdmin { }

您可以阅读更多相关信息here

答案 2 :(得分:0)

指定基本包的一种替代方法是创建一个这样的类注释:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface SwaggerDocumentation {
}

,然后在定义后根据需要在控制器上使用它:

@RestController
@SwaggerDocumentation
public class EntityRestController {

    EntityService entityService;


    @Autowired
    public EntityRestController(final EntityService entityService) {
        this.entityService = entityService;
    }

    @GetMapping("/status")
    String getTest() {
        return "Ready";
    }

    @GetMapping("/api/entities")
    Collection<Entity> getEntities() {
        return entityService.findSome();
    }

}

,最后进入SwaggerConfig类

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(SwaggerDocumentation.class))
                .build();
    }
}