SpringBoot集成Swagger(idea)
本次使用的是Swagger2.9如果使用Seagger3不适用本次学习
Swagger简介
产生背景:
- 前端 -> 前端控制层、视图层
- 后端 -> 后端控制层、服务层、数据访问层
- 前后端通过API进行交互
- 前后端相对独立且松耦合
Swagger:
- 最流行的API框架
- Restful Api文档在线自动生成器(API文档与API定义同步更新)
- 直接可以运行,在线测试API
- 支持多种语言
SpringBoot集成Swagger
运行要求:jdk1.8及以上否则无法运行
步骤:
- 创建一个SpringBoot项目 
- 添加Mavean依赖  - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14- <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> 
 <dependency>
 <groupId>io.springfox</groupId>
 <artifactId>springfox-swagger-ui</artifactId>
 <version>2.9.2</version>
 </dependency>
 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
 <dependency>
 <groupId>io.springfox</groupId>
 <artifactId>springfox-swagger2</artifactId>
 <version>2.9.2</version>
 </dependency>
- 先写一个HelloController测试我们集成的Swagger - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15- package com.example.swagger.controller; 
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 /**
 * @author : bestrookie
 */
 public class HelloController{
 
 public String hello(){
 return "hello-word";
 }
 }
- 想要使用Swagger,我们需要写一个SwaggerConfig来配置Swagger注意包的位置  - 1 
 2
 3- //配置类 
 // 开启Swagger2的自动配置
 public class SwaggerConfig {}
- 测试是否可以访问Swagger:http://localhost:8080/swagger-ui.html ,看到页面说明构建成功 

(此页面是修改配置后的样子 大体即使这么个样子…)
配置Swagger
- Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger。 - 1 
 2
 3
 4
 public Docket docket(){
 return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
 }
- 可以通过apiInfo()属性配置文档信息 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15- //配置Swagger信息=apiInfo 
 private ApiInfo apiInfo() {
 //作者信息
 Contact contact = new Contact("bestrookie","http://bestrookie.cn","******");
 return new ApiInfo(
 "SwaggerAPI文档",
 "一个简单的demo",
 "v1.0",
 "http://bestrookie.cn",
 contact,
 "Apache2.0",
 "http://www.apache.org/licenses/LICENSE-2.0",
 new ArrayList()
 );
 }
- Docket实例关联上apiInfo() - 1 
 2
 3
 4
 public Docket docket(){
 return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
 }
- 重新访问项目是不是就和我上面那个图差不多了 
配置扫描接口
- 构建Docket时通过select方法配置怎么扫描接口
| 1 | public Docket docket(){ | 
- 重新启动项目,由于我们只配置了包的路径扫描接口,所以我们只能看到我们所写的那个类  - 除了包路径配置扫描接口外,还可以通过其他的方式扫描接口 - 1 
 2
 3
 4
 5
 6
 7
 any() // 扫描所有,项目中的所有接口都会被扫描到
 none() // 不扫描接口
 // 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
 withMethodAnnotation(final Class<? extends Annotation> annotation)
 // 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
 withClassAnnotation(final Class<? extends Annotation> annotation)
- 还可以配置接口扫描过滤 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 public Docket docket() {
 return new Docket(DocumentationType.SWAGGER_2)
 .apiInfo(apiInfo())
 .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
 .apis(RequestHandlerSelectors.basePackage("com.example.controller"))
 // 配置如何通过path过滤,即这里只扫描请求以/bestrookie开头的接口
 .paths(PathSelectors.ant("/bestrookie/**"))
 .build();
 }
- 除此之外还有 - 1 
 2
 3
 4- any() // 任何请求都扫描 
 none() // 任何请求都不扫描
 regex(final String pathRegex) // 通过正则表达式控制
 ant(final String antPattern) // 通过ant()控制 
 
配置Swagger开关
通过配置enable()方法配置时候开启swagger,如果是false,swagger将不能在浏览器中访问
| 1 | 
 | 
配置API分组
| 1 | .groupName() | 
- 如果没有配置分组,默认是default,可以通过上面的方法进行设置组名,设置多个分组需要设置多个Docket类 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 public Docket docket(){
 return new Docket(DocumentationType.SWAGGER_2)
 .apiInfo(apiInfo())
 .groupName("bestrookie")
 .enable(true)//enable是否启动swagger,如果为False,则swagger不能在浏览器访问
 .select()
 .apis(RequestHandlerSelectors.basePackage("com.example.controller"))//此处配置的为包扫描还有别的扫描方式
 .build();
 }
 
 public Docket docket1(){
 return new Docket(DocumentationType.SWAGGER_2)
 .groupName("1");
 }
 
 public Docket docket2(){
 return new Docket(DocumentationType.SWAGGER_2)
 .groupName("2");
 }
 
 public Docket docket3(){
 return new Docket(DocumentationType.SWAGGER_2)
 .groupName("3");
 } 
- 设置完如图,但是箭头所指的信息需要重新设定,这是因为在以后工作的开发当中进行小组合作,每个人负责自己的接口,每个人写明自己的信息。 
实体类的配置
- 首先我们新建一个实体类,注意包的位置 建议加上注解。此处注解的作用就是注释,便于前端明白属性的意思
| 1 | package com.example.pojo; | 
- 只要在这个实体类请求接口的返回值上,都能映射到实体类项中
| 1 | 
 | 
- 结果  
- 建议在在实体类那里用注解加上注释 
常用注解
| Swagger注解 | 简单说明 | 
|---|---|
| @Api(tags = “xxx模块说明”) | 作用在模块类上 | 
| @ApiOperation(“xxx接口说明”) | 作用在接口方法上 | 
| @ApiModel(“xxxPOJO说明”) | 作用在模型类上:如VO、BO | 
| @ApiModelProperty(value = “xxx属性说明”,hidden = true) | 作用在类方法和属性上,hidden设置为true可以隐藏该属性 | 
| @ApiParam(“xxx参数说明”) | 作用在参数、方法和字段上,类似@ApiModelProperty | 
皮肤
- 访问*访问** **http://localhost:8080/doc.html\* 
- 添加mavean依赖 - 1 
 2
 3
 4
 5
 6- <!-- 引入swagger-bootstrap-ui包 /doc.html--> 
 <dependency>
 <groupId>com.github.xiaoymin</groupId>
 <artifactId>swagger-bootstrap-ui</artifactId>
 <version>1.9.1</version>
 </dependency> 
 
          
          
          
         
          
         
          
        