Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。它可以在线生成接口文档,并测试接口功能,在前后端分离开发中起着很重要的作用。接下来就开始使用swagger
首先依旧得在pom.xml文件中导入jar包
<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>
然后写一个测试用的接口
@RestController
public class SwaggerTestApi {
@RequestMapping("/test")
public String swaggerTest(){
return "swagger 测试接口";
}
}
配置swagger
@Configuration //让Spring来加载该类配置
@EnableSwagger2 //开启swagger,这个注解也可以在启动类中配置
public class SwaggerConfig {
}
完成上面后,就可以使用,浏览器访问http://localhost:8080/swagger-ui.html#/,就可以看到接口信息
当然这只是乞丐版的配置,啥也没用,接下来我们需要在这个基础上去增加配置,这里提供两种写法
//api接口
@Api(tags = "swagger测试api")
@RestController
public class SwaggerTestApi {
@ApiOperation(value = "测试接口")
@GetMapping("/test")
public String swaggerTest(){
return "swagger 测试接口";
}
}
//swagger配置
@Configuration //让Spring来加载该类配置
@EnableSwagger2 //开启swagger,这个注解也可以在启动类中配置
public class SwaggerConfig {
@Bean //配置swagger的Docket的bean实例
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())//文档信息
.select()
// .apis(RequestHandlerSelectors.basePackage(""))//指定要扫描的包
// .apis(RequestHandlerSelectors.any())//扫描全部
// .apis(RequestHandlerSelectors.none())//都不扫描
// .apis(RequestHandlerSelectors.withClassAnnotation())//扫描类上的注解
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))//扫描方法上的注解
.paths(PathSelectors.any())//过滤
.build();
}
/**
* swagger信息
*
* @return
*/
private ApiInfo apiInfo() {
//作者信息
Contact contact = new Contact("華", "https://blog.csdn.net/weixin_45481406", "");
/**
* 这种写法不能省略参数
*/
// return new ApiInfo(
// "SwaggerApi文档",//标题
// "这是一个很牛逼的作者",//描述
// "1.0", //版本
// "https://blog.csdn.net/weixin_45481406",//组织
// contact,//作者信息
// "Apache 2.0",
// "http://www.apache.org/licenses/LICENSE-2.0",
// new ArrayList());
/**
* 这种写法可以省略不必要的参数
*/
return new ApiInfoBuilder()
.title("SwaggerApi文档")
.description("这是一个很牛逼的作者")
.version("1.0.0")
.build();
}
}
接口分组,如果接口太多,可以尝试对接口进行分组展示,增加groupName属性,其他信息请参考前面的写法,注意不能重复
@Bean
public Docket docket1() {
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docket2() {
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
@Bean
public Docket docket3() {
return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}
给大家我的git源码,有兴趣的小伙伴可以看看具体的实现(一直在更新中)
git地址:https://github.com/peach-tec/peachsys