swagger2版本与3版本差异的报错与处理
配了几个小时,最后发现swagger2.xx与3.xx之间做了很大的改动。
那首先就先看一下问题。
问题
开始学习swagger,第一步就给我上一课。
开始我的配置为
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
然后开启swagger注解使用
@Configuration
@EnableSwagger2//开启Swagger2
public class SwaggerConfig {
}
访问swagger-UI
http://localhost:8080/swagger-ui.html
结果:
网站报404
解决方案
方案一(降低配置)
long time later
我想是不是我的版本问题。
------- 确实是。
swagger注解使用*
@Configuration @EnableSwagger2//开启Swagger2 public class SwaggerConfig { }
访问swagger-UI
http://localhost:8080/swagger-ui.html
以上的配置需求是:
<!-- Swagger 2.9.0-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
方案二(继续使用3.xx)
这个的配置需求是:
<!-- swagger 3.0.0-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
一个就可以,2.9.xx到3.xx 有较大的的改变。
开启swagger服务改为了
@EnableOpenApi
public class SwaggerConfig {}
访问路径改为
http://localhost:8080/swagger-ui/index.html
如果希望访问方便的话可以设置以下内容:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
//配置路径
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 路径查看maven下的jar包 下面的路径
// addResourceHandler 在源码中的解释为:
// Add a resource handler to serve static resources.
// The handler is invoked for requests that match one of the specified URL path patterns.
// 即 被调用的url路径
// addResourceLocations 在源码中是这样解释的:
// Add one or more resource locations from which to serve static content.(即静态资源路径)
// resourceChain 在源码中的解释为:
//Configure a chain of resource resolvers and transformers to use.
registry.addResourceHandler("/swagger-ui/**")
.addResourceLocations(
"classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
.resourceChain(false);
}
// 配置访问路径
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// addViewController 在源码中的解释为:
// Map a URL path or pattern to a view controller
// to render a response with the configured status code and view.
// 即(将 URL 路径或模式映射到视图控制器以使用配置的状态代码和视图呈现响应)
// setViewName 在源码中的解释为:
// Set the view name to return. 即(设置要返回的视图名称)
registry.addViewController("/s6ui")
.setViewName("redirect:/swagger-ui/index.html");
// 这个主要是方便。
}
}
注:这个/s6ui 是我随便起的,swagger-ui => s6ui ;中间6个字母。
springfox-swagger-ui:3.0.0的结构如下:
springfox-swagger-ui:2.9.0的结构如下:
对比看二者的差异还是很大的,swagger-ui.html 改为index.html 到了springfox-swagger-ui下面。