java - 我可以更改 Swagger 显示的默认定义吗?

标签 java spring-boot swagger-ui swagger-2.0 springfox

enter image description here

我可以将默认定义从“默认”更改为我自己的定义吗?我希望加载页面,而不是加载“默认”页面,而是加载我的页面,在本例中称为“swagger”:

enter image description here

我正在使用 Spring Fox 和 Spring Boot。这是我的 Swagger Config 类:

@Configuration
@EnableSwagger2WebMvc
@Import(SpringDataRestConfiguration.class)
public class SwaggerDocumentationConfig {
    @Bean
    public Docket api() {

        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.openet.usage.trigger"))
                .paths(PathSelectors.any())
                .build();
    }

    private static Predicate<String> matchPathRegex(final String... pathRegexs) {
        return new Predicate<String>() {
            @Override
            public boolean apply(String input) {
                for (String pathRegex : pathRegexs) {
                    if (input.matches(pathRegex)) {
                        return true;
                    }
                }
                return false;
            }
        };
    }

    @Bean
    WebMvcConfigurer configurer () {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addResourceHandlers (ResourceHandlerRegistry registry) {
                registry.addResourceHandler("/config/swagger.json").
                        addResourceLocations("classpath:/config");
                registry
                        .addResourceHandler("swagger-ui.html")
                        .addResourceLocations("classpath:/META-INF/resources/");
                registry
                        .addResourceHandler("/webjars/**")
                        .addResourceLocations("classpath:/META-INF/resources/webjars/");
            }
        };
    }
}

最佳答案

可以改变这种行为,但它看起来更像是一种黑客行为。

SwaggerResourcesProvider 负责为下拉列表提供信息。首先,实现这个接口(interface)。其次,将 Primary 注释添加到您的类中,以成为应该使用的主要实现,而不是默认的 InMemorySwaggerResourcesProvider 类。但重用 InMemorySwaggerResourcesProvider 提供的定义仍然有意义,这就是应该注入(inject)它的原因。

最后一部分是实现重写的get方法并更改为您想要显示的列表。此示例应仅显示一个名为 swagger 的定义。

// other annotations
@Primary
public class SwaggerDocumentationConfig implements SwaggerResourcesProvider { 
   private final InMemorySwaggerResourcesProvider resourcesProvider;

   @Inject
   public MySwaggerConfig(InMemorySwaggerResourcesProvider resourcesProvider) {
       this.resourcesProvider = resourcesProvider;
   }

   @Override
   public List<SwaggerResource> get() {
       return resourcesProvider.get().stream()
           .filter(r -> "swagger".equals(r.getName()))
           .collect(Collectors.toList());
   }

   // the rest of the configuration
}

关于java - 我可以更改 Swagger 显示的默认定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60326035/

相关文章:

curl - 如何解决 404 错误 : Not Found in swagger while testing the api in Laravel 6

swagger-ui - Swagger UI - 添加禁用 "try it out"按钮的 curl 示例

java - 什么时候适合使用 IllegalAccessException?

java - 演示SalesPerson2.java :15: error: constructor SalesPerson in class SalesPerson cannot be applied to given types;

java - 如何在单元测试中设置不同的类路径以使用 Spring 加载资源

spring - AOP:在一个切入点中支持@annotation和@within

scala - Play Swagger UI url 别名

java - super() 不让我用参数调用 super 构造函数

java - 如何将字节数组转换为字符串?

java - spring boot redis starter 获取错误字符串超出最大允许大小 (512MB)