swagger Spring Boot 执行器/摆动

yr9zkbsy  于 2022-11-06  发布在  Spring
关注(0)|答案(6)|浏览(185)

我正在处理Sping Boot 应用程序,我使用Swagger作为文档。
我已经在我的应用程序中添加了Sping Boot Actuator,但是现在我想在我的swagger文档中添加由Actuator(/health /metrics..)创建的新服务。
我不知道如何配置执行器和斯瓦格。

t3irkdon

t3irkdon1#

您可以在Swagger中配置要添加到文档中的路径:

@Bean
public Docket appApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            ...
}

将显示所有可用的端点。
.paths(PathSelectors.any("/mypath/**"))将仅限于在mypath.中公开的端点

x6h2sr28

x6h2sr282#

更新日期:2017年4月26日,更新实施。提示的积分为Andy Brown

由于我们的编码约定,我们没有为端点指定特定的前缀,所以我在寻找一个排除执行器端点的解决方案,而不是包含我自己的路径。
我已经想出了以下配置来只排除执行器端点。这样,我就不必在添加新端点后更新配置,也不必为自己的端点添加前缀来将它们与执行器端点区分开来。

/**
 * This enables swagger. See http://localhost:8080/v2/api-docs for the swagger.json output!
 * @param actuatorEndpointHandlerMapping this endpoint handler mapping contains all the endpoints provided by the
 * spring actuator. We will iterate over all the endpoints and exclude them from the swagger documentation.
 * @return the docket.
 */
@Autowired
@Bean
public Docket swaggerSpringMvcPlugin(final EndpointHandlerMapping actuatorEndpointHandlerMapping) {
    ApiSelectorBuilder builder = new Docket(DocumentationType.SWAGGER_2)
            .useDefaultResponseMessages(false)
            .apiInfo(apiInfo())
            .securitySchemes(securitySchemes())
            .select();

    // Ignore the spring-boot-actuator endpoints:
    Set<MvcEndpoint> endpoints = actuatorEndpointHandlerMapping.getEndpoints();
    endpoints.forEach(endpoint -> {
        String path = endpoint.getPath();
        log.debug("excluded path for swagger {}", path);
        builder.paths(Predicates.not(PathSelectors.regex(path + ".*")));
    });

    return builder.build();
}
dohp0rv5

dohp0rv53#

ApiSelectorBuilder builder = new Docket(DocumentationType.SWAGGER_2)
  .useDefaultResponseMessages(false)
  .apiInfo(apiInfo())
  .securitySchemes(securitySchemes())
  .select()
  .apis(RequestHandlerSelectors.any())
  .paths(Predicates.not(PathSelectors.regex("/actuator.*")))
  .build();

嗨,你可以排除正则表达式的路径,你可以链他们.

i7uq4tfw

i7uq4tfw4#

要在springdoc-openapi中显示spring-boot-actuator端点,只需添加以下属性:

springdoc.show-actuator=true
wrrgggsh

wrrgggsh5#

通过application.properties文件将执行器端点移动到上下文路径中。

management.context-path=/manage

那么你就可以排除那条路

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(Predicates.not(PathSelectors.regex("/manage.*")))
            .build();
}

您可能还需要排除错误控制器

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(Predicates.not(PathSelectors.regex("(/manage.*|/error)")))
            .build();
}
rdrgkggo

rdrgkggo6#

备选方案:
a)排除正则表达式中带有NOT的路径

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.regex("^((?!/error).)*")) // exclude Basic Error Controller
            .build();
}

B)或链和对 predicate 求反

PathSelectors.any()
  .and(PathSelectors.regex("/error").negate())
  .and(PathSelectors.regex("/manage.*").negate());

相关问题