前言:
做前后端分离的项目,非常重要的一点就是写好接口文档,用Swagger可以自动同步代码里的注解内容,同时可以直接在页面请求接口。
使用过程中,也发现了一些缺点,比如不能记录上次请求接口的数据,必须先发布代码才能看到Swagger页面。所以我们已经改用YApi了,YApi的接口可以手写,也可以从Swagger导入,这个属于工具,不属于代码范畴了。不过我们依然在代码里保留了Swagger,因为注解看着挺清晰的
项目为:SpringBoot + Maven
正文:
访问地址:http://localhost:8080/swagger-ui.html
配置:
pom.xml
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
Swagger配置类
package com.bf;
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.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
//用@Configuration注解该类,等价于XML中配置beans;用@Bean标注方法等价于XML中配置bean。
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket baseDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(baseInfo())
.groupName("base_api")
.select()
.apis(RequestHandlerSelectors.basePackage("com.bf.base.web"))
.paths(PathSelectors.any())
.build()
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
@Bean
public Docket testDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(testInfo())
.groupName("test_api")
.select()
.apis(RequestHandlerSelectors.basePackage("com.bf.test.web"))
.paths(PathSelectors.any())
.build()
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
private ApiInfo baseInfo() {
return new ApiInfoBuilder()
.title("基础接口文档")
.description("API 描述。。。")
.contact(new Contact("微信号", "http://www.test.com", ""))
.version("v1.0")
.build();
}
private ApiInfo testInfo() {
return new ApiInfoBuilder()
.title("test是我随便起的名字 接口文档")
.description("API 描述。。。")
.contact(new Contact("企业号", "http://www.test.com", ""))
.version("v1.0")
.build();
}
}
Application
package com.bf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import tk.mybatis.spring.annotation.MapperScan;
//加上注解@EnableSwagger2 表示开启Swagger
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableResourceServer
@MapperScan("com.bf.*.dao")
public class OtcCoreApplication {
public static void main(String[] args) {
SpringApplication.run(OtcCoreApplication.class, args);
}
}
使用:
controller
@ApiOperation(value = "文章详情")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "文章编号", required = true, dataType = "String", paramType = "query"),
})
@RequestMapping(value = "article", method = RequestMethod.GET)
public Result<Article> getArticleInfo(String id) {
return this.theService.getArticleInfo(id);
}
如果传入的参数是用实体类接收的
package com.bf.dnh.params.xx;
import io.swagger.annotations.ApiModelProperty;
public class AddVo {
@ApiModelProperty(name="province", value="所在省", required=true)
private String province;
@ApiModelProperty(name="city", value="所在市", required=true)
private String city;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
参考博客:
SpringBoot整合Swagger2 - jtlgb - 博客园
https://www.cnblogs.com/jtlgb/p/8532433.html