使用Swagger 2

时间:2016-07-21 10:10:50

标签: java swagger jersey-2.0 swagger-2.0

在配置Swagger 2时有没有办法指定多个包?

    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.0");
    beanConfig.setResourcePackage("com.company1.resources ; org.company2.resources");
    beanConfig.setScan(true);

BeanConfig.setResourcePackage只接受一个字符串。如果我用空格分隔它们,只考虑第一个空格。如果我尝试使用semicolon,则swagger找不到任何内容。

我在Jersey 2上有一个Spring Boot应用程序。

2 个答案:

答案 0 :(得分:5)

我没有在任何地方看到过这种情况,但根据当前Swagger核心(1.5.10)中的代码,您看起来像是用逗号(',')分隔多个包。以下是one的相关摘要:

BeanConfig.java

进一步向下看, if (resourcePackage != null && !"".equals(resourcePackage)) { String[] parts = resourcePackage.split(","); for (String pkg : parts) { if (!"".equals(pkg)) { acceptablePackages.add(pkg); config.addUrls(ClasspathHelper.forPackage(pkg)); } } } else { allowAllPackages = true; } 标志使Swagger生成有应用程序类路径中具有JAX-RS注释的所有类的文档。根据您的依赖关系,根本不设置资源包可能是一个选项。但是,使用以逗号分隔的列表可能更安全。

编辑:

我确实在documentation中找到了这一点:

  

setResourcePackage(字符串)

     

resourcePackage

     

设置Swagger应扫描哪些包以获取资源。如果有多个包,则可以是以逗号分隔的包列表。

答案 1 :(得分:0)

如果所有API都在同一个项目中但在不同的程序包中,则可以这样指定两者的基本程序包的名称。

com.company1.resources1 org.company1.resources2 然后仅给出一个这样的名称-然后它将列出所有控制器。

  @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors
                    .basePackage("com.company1"))
                .paths(PathSelectors.regex("/.*"))
                .build().apiInfo(apiEndPointsInfo());
        }