目录

Swagger报错No operations defined in spec!解决

目录

分析

Swagger报错No operations defined in spec! 一般有2个原因:

  1. basePackage错误;
  2. path错误;

第1个basePackage错误,主要是扫描的包内没有controller,或者controller类上没有@Controller注解。

其中第2个path错误,path要是全匹配url,url是完整的,包含方法的url,本人因为path只写controller上的url,没写方法上的url,找了1天也没找到原因,看之前项目才发现url不是完整的url;如果不是完整的url,正则是/path/rest/pic/.*, 正则是 .*

完整可用的配置类如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@Configuration  
@EnableSwagger2  
public class Swagger2Config {  
    @Value("${swagger.enable}")  
    boolean swagger2enable;  
  
    @Bean  
    public Docket createRestApi() {  
        return new Docket(DocumentationType.SWAGGER_2)  
                .apiInfo(apiInfo())  
                .enable(swagger2enable)  
                .select()  
                .apis(RequestHandlerSelectors.basePackage("com.test.controller"))  
                .paths(doFilteringRules())  
                .build();  
    }  
  
    private Predicate<String> doFilteringRules() {  
 //       return PathSelectors.any();  
 //       return PathSelectors.regex("/report/.*");  
//      return Predicates.not(PathSelectors.regex("/error.*"));  
//      return or(regex("/hello.*"), regex("/rest/adxSspFinanceManagement.*"));//success  
        return or(regex("/rest/pic/url/query"),  //此处必须为完整的url,到方法级别  
                regex("/rest/text/url/query/.*") //部分url的正则是 .*  
//                regex("/api/v1/pop/bms/audit/.*")  
        );  
    }  
  
    private ApiInfo apiInfo() {  
        return new ApiInfoBuilder()  
                .title("Check APIs")  
                .description(" 测试环境地址:http://10.179.88.216:8083")  
                .termsOfServiceUrl("http://10.179.88.216:8083")  
                .contact("开发团队")  
                .version("1.0")  
                .build();  
    }  
  
}