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包依賴,一定要盡可能合理並且不重復引用。遇到訪問不到的問題首先考慮模塊的引入是不是有問題,再具體看掃描路徑。