SpringFox Docket per controller not working in spring boot

前端 未结 2 915
忘了有多久
忘了有多久 2020-12-18 16:24

In my spring boot application, I have multiple Rest Controllers and need to generate swagger for each controller seperately.

By using below Docket config for each co

2条回答
  •  甜味超标
    2020-12-18 17:29

    Here is the code i wrote to find and automatically create Docket on runtime per controller, also has a Default Docket to show all in one group.

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Autowired
        ConfigurableApplicationContext context;
    
        //Default Docket to show all
        @Bean
        public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(metaData())
            .forCodeGeneration(Boolean.TRUE)
            .select()
            .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
            .paths(PathSelectors.any())
            .paths(Predicates.not(PathSelectors.regex("/error.*")))
            .build();
        }
    
        //Creating Docket Dynamically per Rest Controller 
        @PostConstruct
        public void postConstruct() throws ClassNotFoundException {
        ClassPathScanningCandidateComponentProvider provider
            = new ClassPathScanningCandidateComponentProvider(false);
        provider.addIncludeFilter(new AnnotationTypeFilter(RestController.class));
        for (BeanDefinition beanDef : provider.findCandidateComponents("com.blah.blah.package")) {
            Class cl = Class.forName(beanDef.getBeanClassName());
            RequestMapping requestMapping = cl.getAnnotation(RequestMapping.class);
            if (null != requestMapping && null != requestMapping.value() && requestMapping.value().length > 0) {
            String resource_group = requestMapping.value()[0];
            SingletonBeanRegistry beanRegistry = context.getBeanFactory();
            Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .groupName(resource_group)
                .apiInfo(metaData())
                .forCodeGeneration(Boolean.TRUE)
                .select()
                //.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                .paths(PathSelectors.regex(resource_group + ".*"))
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                .build();
            beanRegistry.registerSingleton(cl.getSimpleName() + "_docket_api", docket);
            }
        }
        }
    
        private ApiInfo metaData() {
        return new ApiInfoBuilder()
            .title("some Title Here")
            .description("Some Desciption")
            .version("1.0")
            .contact(new Contact("Asad Abdin", "", "asadabdin@gmail.com"))
            .build();
        }
    

提交回复
热议问题