1、首先说一下软件的版本:springboot:1.5.2;springcloud:D-SR1;swaager2:2.6.0;gradle:4.5。工程模块是分开的单独的entity,api,mapper,service,每一个都是一个工程。
2、新项目需要集成swagger,看了一堆网上的例子,觉得很简单,便随意一试。
3、我了个去,集成结束后,访问页面直接是白页面。苍天啊,你最起码给我个网上遇到问题最多的问题404啊,给我个白页面是什么鬼,没办法找问题吧。
4、我引入jar包的位置是在整个项目根目录下build.gradle中,有两处引用(最外层dependencies,subproject中dependencies)代码在内网,此处就不贴了,模仿maven引入就行了,swwager配置如下:
@Configuration
@EnableSwagger2
public class SwaggerConfig{
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.web.frontend"))
.paths(PathSelectors.none())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("xxx项目 RESTful APIs")
.description("yyblog项目api接口文档")
.version("1.0")
.build();
}
}
5、白页面肯定是访问目标有问题,要么是没找到,要么是报错了,要么是拒绝连接,看了一下jar包中页面的位置,也怀疑像很多人遇到的问题一样,需要配
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {/**
* 配置静态资源路径以及上传文件的路径
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/upload/**").addResourceLocations(environment.getProperty("spring.resources.static-locations"));
/*swagger-ui*/
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
6、我也配了,而且配置在swaagerConfig中丝毫没有作用,去他奶奶的,这是为什么。访问资源就没有找到啊,后来看到有些加了配置registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/").setCachePeriod(0);加完这个页面是有反应了,但是仍然是有问题。一时半会也没解决,偶然在解决模块间相互依赖时,找到灵感,访问不到资源,也许是由于模块化导致扫描出了问题。果然在config类上加了@ComponentScan(basePackages="com.aa.api"),同时在build.gradle中引入api的project。一切正常了。也不需要什么配置静态资源路径什么的。其实我理解的流程应该是,通过引入api工程使得整个项目对api有一个配置加载,也就是引入,但是单单引入不行,还要在需要使用的地方进行加载,也就是config类中加扫描,这样就构成了一个整体。先引入再加载。
7、总结:使用模块构建的项目,在使用一些依赖时,包括模块依赖和jar包依赖,一定要尽可能合理并且不重复引用。遇到访问不到的问题首先考虑模块的引入是不是有问题,再具体看扫描路径。