目的:减少postman的使用,以及生成对应的接口文档
1、添加依赖
基于自身spring boot 版本2.7.X
我选择的是:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!--Knife4j swagger中文 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- 引入swagger-bootstrap-ui包 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.8.5</version>
</dependency>
如果Spring Boot 在2.6以前 fox和 knife4j要在2.9.x左右才可以
2、配置在application.properties中配置信息(application.yaml同理)
swagger路径配置是springboot 2.6版本以上才写的。
#swagger路径配置 否则报错空指针
spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER
#增强knife4j,也可以不增强 就不用写下面的内容
knife4j.enable=true
3、生成Swagger的配置信息
开启了多个注解(我直接复制修改部分配置名称即可)
/*开启swagger2*/
@EnableSwagger2
@Configuration
/*开启mvc访问*/
@EnableWebMvc
/*开启swagger增强工具*/
@EnableKnife4j
/*只有开发可以访问*/
@Profile({"dev"})
public class Swagger {
/*创建API 应用
* apiInfo() 增加API 相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露Swagger 来 展示
* */
private final OpenApiExtensionResolver openApiExtensionResolver;
@Autowired
public Swagger(OpenApiExtensionResolver openApiExtensionResolver) {
this.openApiExtensionResolver = openApiExtensionResolver;
}
/*自己定义名字*/
@Bean(value = "xxxAPI")
public Docket xxxAPI() {
Docket docket=new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.host("http://localhost:ip/port")
.select()
/*扫描路径 我的是controller层*/
.apis(RequestHandlerSelectors.basePackage("xxx.xxx.xxx.controller"))
.paths(PathSelectors.any())
.build()
.extensions(openApiExtensionResolver.buildSettingExtensions());
return docket;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().
title("API接口文档")
.description("仅用于项目开发/测试/对接使用")
.termsOfServiceUrl("")
//编写你的联系方式 name url email
.contact(new Contact("xxx", "http://www.baidu.com", "12313@163.com"))
.version("1.1")
.build();
}
}
4、配置MVC配置信息,如果有拦截器记得打开权限
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
@Resource
MyInterceptor myInterceptor;
/**
* 放行Swagger
*/
private static final String[] SWAGGER_WHITELIST = {
"/swagger-ui.html/**",
"/swagger-ui/**",
"/swagger-resources/**",
"/v2/api-docs",
"/v3/api-docs",
"/v3/api-docs/swagger-config",
"/webjars/**",
/*knifej*/
"/doc.html",
};
/*通过注册中心配置拦截器*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor)
.excludePathPatterns("/user/login")
.excludePathPatterns(SWAGGER_WHITELIST)
.addPathPatterns("/**")
;
}
//该方法是为了访问knife4j的页面,否则会提示404报错
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
如果没有拦截器也请一定要记得加上addResourceHandlers方法,目的是为了访问doc.html页面
5、自身根据业务配置相应注解
常用注解
我是基于Swagger2的,因此在控制层写了部分注解
启动程序后在http:ip/port/doc.html中即可看到内容
点击对应的控制层能看到相关内容
生成API文档并支持下载
暂时可以满足我的要求