1、配置完成后,访问swagger-ui.html结果不显示controller方法
或者报No operations defined in spec!
网上大部分说是在swagger的配置类中未写明apis()这个方法里的参数,可我本地确定是配置了,还怀疑过是spring的版本和swagger的版本不兼容问题,经过反复搜索及排查,发现和配置的扫描包无关,和环境的版本号也无关(spring-4.1.6;springfox-swagger2 2.9.2;springfox-swagger-ui 2.9.2),而是因为在spring-mvc.xml中没有将自己写的swagger配置类注入其中
配置后,页面访问正常
2、对于百度查到的解决方式,在配置类的apis()中添加路径以及配置注解@ComponentScan,也做了简单了解
- ① 配置类中apis()理解 ,见代码中的注释
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
// .apis(RequestHandlerSelectors.any()) //加载所有的controller的方法到swagger中
//.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) //扫描所有有注解的api,待深入了解
//只加载com.itic.appbase.applications.sys.swagger.test这个包下的controller中的方法
.apis(RequestHandlerSelectors.basePackage("com.itic.appbase.applications.sys.swagger.test"))
.paths(PathSelectors.any())
.build();
}
- ② 注解@ComponentScan的理解
该注解是spring的注解,创建一个配置类,在配置类上添加 @ComponentScan 注解。该注解默认会扫描该类所在的包下所有的配置类,相当于spring-mvc.xml文件中的 context:component-scan
<!-- 注解扫描,只扫描com.itic.appbase下的Controller -->
<context:component-scan base-package="com.itic"
use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>