最近开始使用swagger 3.0.0来做项目,发现按照网上的教程进行配置,swagger-ui出不来,总是显示404错。经过一番搜索发现,原来是因为swagger升级到3之后,用法上大大简化了。主要的区别在以下两点:
不再需要EnableSwagger2的注解。所以之前的教程其实都不适用于swagger 3.0.0。按照之前的写法去开发,很容易掉坑。
不再需要在dependency里分别引入swagger2的两个包,取而代之的是只需要引入一个"io.springfox:springfox-boot-starter:3.0.0"。和springboot一样简洁。
上述说明其实在swagger官网有说,但是大部分人不看而已,所以给出链接:如何从swagger老版本迁移到3.0.0
swagger2.0
pom.xml添加依赖
<!--Swagger版本 2.9.2-->
<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>
2、创建 Swagger2Configuration.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class Swagger2Configuration {
//api接口包扫描路径
public static final String SWAGGER_SCAN_BASE_PACKAGE = "com.muyao.galaxy";
public static final String VERSION = "1.0.0";
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
.paths(PathSelectors.any()) // 可以根据url路径设置哪些请求加入文档,忽略哪些请求
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("单词计数服务") //设置文档的标题
.description("单词计数服务 API 接口文档") // 设置文档的描述
.version(VERSION) // 设置文档的版本信息-> 1.0.0 Version information
.termsOfServiceUrl("http://www.baidu.com") // 设置文档的License信息->1.3 License information
.build();
}
}
作者:大鱼炖海棠
链接:https://www.jianshu.com/p/c79f6a14f6c9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
swagger3.0
maven
有且只有这一个
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
config
package com.jdwifi.g1335333249.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
//@Configuration
//@Profile("swagger")
//@ComponentScan("com.jdwifi.g1335333249.JdUserLogin.controller")
//public class SwaggerConfig {
//
// @Bean
// public Docket createRestApi() {
// return new Docket(DocumentationType.SWAGGER_2)
// .apiInfo(apiInfo())
// .enable(true)
// .select()
// .apis(RequestHandlerSelectors.basePackage("com.jdwifi.g1335333249.JdUserLogin.controller"))
// .paths(PathSelectors.any())
// .build();
// }
//
// private ApiInfo apiInfo() {
// return new ApiInfoBuilder()
// .title("XXX Rest Server")
// .description("XXXRest接口")
// .contact(new Contact("contract", "url", "email"))
// .version("1.0")
// .build();
// }
//}
@Configuration
@EnableOpenApi
public class SwaggerConfig {
//配置了Swagger的Docket的bean实例
//enable是否启动swagger,如果为False则Swagger不能在浏览器访问
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors,配置要扫描接口的方式
//basePackage:指定要扫描的包
//any():扫描全部
//none():不扫描
//.withClassAnnotation():扫描类上的注解
//.withMethodAnnotation():扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.jdwifi.g1335333249.JdUserLogin.controller"))
//paths()过滤什么路径
/*.paths(PathSelectors.ant("/mi/**"))*/
.build();
}
//作者信息
Contact contact = new Contact("小唐","xiaotangstudio.cn","[email protected]");
//配置Swagger 信息 = ApiInfo
private ApiInfo apiInfo()
{
return new ApiInfo("小唐的Api文档",
"好好看文档",
"1.0",
"xiaotangstudio.cn",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList<>());
}
}
如果报错404
package com.jdwifi.g1335333249.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
"classpath:/static/");
registry.addResourceHandler("swagger-ui.index.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
}
}
从现有 2.x 版本迁移 @EnableWebMvc 重要
上述说明其实在swagger官网有说,但是大部分人不看而已,所以给出链接:如何从swagger老版本迁移到3.0.0
Spring Boot 应用程序
注意:希望得到反馈以使其更好
- 删除显式依赖
springfox-swagger2
- 删除
@EnableSwagger2
注释 - 添加
springfox-boot-starter
依赖 - Springfox 3.x 移除了对 guava 和其他 3rd 方库的依赖(还不是零依赖!依赖于 spring 插件和用于注释和模型的开放 api 库)所以如果你使用了 guava 谓词/函数,这些将需要转换到 java 8 函数接口
- 如果您正在使用 WebMvc 但您还没有使用该@EnableWebMvc注解,请添加此注解。