Springfox2.6.1+SpringMVC+Swagger2配置手记

最近一直在捣鼓Swagger的事情,起初使用Swagger1可以配个 swagger-springmvc成功,但是它配合SpringMVC项目如果是一个上传文件就不太友好了,无法展示上传文件的按钮,所以有上传文件,图片的api就无法使用了!!!!

百度了好一阵子,在万能的stackoverflow上终于得到答案,国内的搜索网站贴吧这点儿真的有些逊色了,没有关于这方面的解决方案,还是靠我微薄的英语知识搜索到的,原来 swagger-springmvc1.0.2(最新的)已经过时了,已经被springfox取代了 !!!!!!!!

好吧,伐开心!好不容易熬了几个通宵配置起来的swagger就这样夭折了。

那就继续研究springfox的swagger配置;

现在时刻的当前版本是springfox2.6.1;果断maven下来

    <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox.version}</version>
        </dependency>

在然后写配置:

@Configuration // 配置注解
@EnableWebMvc // 启用Mvc //非springboot框架需要引入注解@EnableWebMvc
@EnableSwagger2 // 启用Swagger2,毕竟SpringFox的核心依旧是Swagger
// @ComponentScan(basePackages = "com.june.controller.back.common.*")//然而并没有卵用
public class SwaggerConfig extends WebMvcConfigurerAdapter {
	@Bean
	public Docket customDocket() {
		return new Docket(DocumentationType.SWAGGER_2).select()// 选择哪些路径和API会生成document
				.apis(RequestHandlerSelectors.any())// 对所有api进行监控
				.paths(PathSelectors.any())// 对所有路径进行监控
				.build().apiInfo(apiInfo());
	}// */

	private ApiInfo apiInfo() {
		return new ApiInfo(PROJ, DESC, VERS, SERV, new Contact(NAME, URL, CONT), LICS, L_URL);
	}

}

小弟的所有配置都是参考了这位CSDN的仁兄的博客 好吧开开心心的(其实并不开心,工作好好的,就今天公司说辞就辞,把一位一起工作的同事给辞掉了,很震惊也很愤怒,更为自己考虑考虑),然后运行,心想这个应该不会有问题了,因为以前的swagger1已经配置的very very good了,至少运行是没有任何问题的,结果呵呵哒!

352198 [localhost-startStop-1] DEBUG o.s.b.f.s.DisposableBeanAdapter - Invoking destroy method 'close' on bean with name 'dataSource'
352207 [localhost-startStop-1] ERROR o.s.web.context.ContextLoader - Context initialization failed
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is com.google.common.util.concurrent.ExecutionError: java.lang.StackOverflowError
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176)
	at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
	at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
	at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
	at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:852)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: com.google.common.util.concurrent.ExecutionError: java.lang.StackOverflowError
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201)
	at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830)
	at springfox.documentation.spring.web.scanners.CachingOperationReader.read(CachingOperationReader.java:57)
	at springfox.documentation.spring.web.scanners.ApiDescriptionReader.read(ApiDescriptionReader.java:66)
	at springfox.documentation.spring.web.scanners.ApiListingScanner.scan(ApiListingScanner.java:89)
	at springfox.documentation.spring.web.scanners.ApiDocumentationScanner.scan(ApiDocumentationScanner.java:70)
	at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.scanDocumentation(DocumentationPluginsBootstrapper.java:85)
	at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:127)
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
	... 18 common frames omitted
Caused by: java.lang.StackOverflowError: null
	at com.fasterxml.classmate.TypeBindings.equals(TypeBindings.java:221)
	at com.fasterxml.classmate.ResolvedType.equals(ResolvedType.java:278)
	at com.fasterxml.classmate.types.ResolvedRecursiveType.equals(ResolvedRecursiveType.java:157)
	at com.fasterxml.classmate.TypeBindings.equals(TypeBindings.java:221)
	at com.fasterxml.classmate.ResolvedType.equals(ResolvedType.java:278)
	at com.fasterxml.classmate.types.ResolvedRecursiveType.equals(ResolvedRecursiveType.java:157)
	at com.fasterxml.classmate.TypeBindings.equals(TypeBindings.java:221)
	at com.fasterxml.classmate.ResolvedType.equals(ResolvedType.java:278)

这个问题废了两天也没解决掉,是因为国内研究springfox太少的缘故么,至少网上搜索的时候发现大部分有关springfox的介绍都是2016年底的文章,看来又到我发挥英语的时候啦,注意下面的关键词,在百度输入:“swagger2.6.0 can not work well with springmvc ”,蓝后搜索,还是万能的stackoverflow给力了, 解决问题,在这个最后发现一位仁兄这样总结的:

a work around is to rollback to springfox-swagger2 2.5.0 .

呵呵,现在正在研究 spring2.5.0了......有成果了在了分享!

转载于:https://my.oschina.net/junehappylove/blog/829244

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值