Могу ли я изменить определение по умолчанию, отображаемое Swagger? - PullRequest
0 голосов
/ 20 февраля 2020

enter image description here

Могу ли я изменить определение по умолчанию с «по умолчанию» на свое собственное. Я хотел бы, чтобы страница загружалась, и вместо загрузки по умолчанию она загружала бы мою, которая в данном случае называется просто «чванство»:

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/");
            }
        };
    }
}

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Можно изменить это поведение, но оно больше похоже на взлом.

SwaggerResourcesProvider отвечает за предоставление информации для выпадающего списка. Во-первых, реализовать этот интерфейс. Во-вторых, добавьте аннотацию Primary в ваш класс, чтобы она стала основной реализацией, которую следует использовать вместо класса InMemorySwaggerResourcesProvider по умолчанию. Но все же имеет смысл повторно использовать определения, предоставленные InMemorySwaggerResourcesProvider, и поэтому его следует вводить.

Последняя часть - реализовать переопределенный метод 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
}
0 голосов
/ 27 февраля 2020

Я только что сделал перенаправление в моем контроллере:

@RequestMapping(value = "/", method = RequestMethod.GET)
public void redirectRootToSwaggerDocs(HttpServletResponse response) throws IOException {
    response.sendRedirect("/my-api/swagger-ui.html?urls.primaryName=swagger");
}
...