Springboot系列——集成swagger2,生成API

本文介绍了如何将Swagger2快速集成到SpringBoot应用中,以自动生成RESTful API文档。通过添加POM依赖、配置文件、启动类注解以及接口上的Swagger注解,可以方便地管理和展示API接口。
摘要由CSDN通过智能技术生成

Springboot系列——集成swagger2,生成API

Swagger简介

Swagger 是一款RESTFUL接口的、基于YAML、JSON语言的文档在线自动生成、代码自动生成的工具。

很多时候由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。
随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象。
为了解决这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。

Springboot中swagger2快速集成

1.配置pom依赖
<!--父依赖-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<!--编码格式-->
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>

    <!--核心依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
    <!--Swagger2-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.5.0</version>
    </dependency>
    
    <!--Swagger-ui-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.5.0</version>
    </dependency>
    
    <!-- 引入web依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- 引入test测试依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
    <!-- Junit 单元测试 依赖 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    
    <!-- 引入Lombock依赖 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!--阿里fastjson-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.46</version>
    </dependency>
    
    <!-- Spring Boot devtools 热部署 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

    <!--quartz定时任务-->
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.3.0</version>
    </dependency>

    <!--Excel导入导出-->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
    </dependency>

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>RELEASE</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <!-- SpringBoot 项目打jar包的Maven插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <!-- SpringBoot项目打包jar名称 -->
    <finalName>SpringBoot-one</finalName>
</build>
2.添加配置文件

/**

  • @author 倾宸
  • @date 2019/6/24 13:47
  • 通过 @Configuration 注解,让Spring来加载该类配置。
  • 再通过 @EnableSwagger2 注解来启⽤Swagger2
    /
    @Configuration
    @EnableSwagger2
    public class SpringSwaggerConfig {
    /
    *
    • @Author LiuSenChuan
    • @Description //TODO
    • @Date 2019/6/24
    • 通过createRestApi函数创建Docket的bean之后,
    • apiInfo用来创建该API的信息,
    • select函数返回一个ApiSelectorBuilder实例用来控制那些接口暴露给swagger来展现。
      **/
      @Bean
      public Docket createRestApi() {
      return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      .select()
      .apis(RequestHandlerSelectors.basePackage(“com.jmccms”))
      .paths(PathSelectors.any())
      .build();
      }
      private ApiInfo apiInfo() {
      return new ApiInfoBuilder()
      .title(“Swagger2构建RESTful APIs”)
      .description(“果果”)
      .termsOfServiceUrl(“https://blog.csdn.net/qq_44741038”)
      .version(“1.0”)
      .build();
      }
      }
3.编写启动类

/**

  • @author 倾宸
  • @date 2019/6/19 9:24
    */

@EnableSwagger2
@SpringBootApplication
public class SpringBootOApplication{

/**
 * @Author LiuSenChuan
 * @Description 启动类
 * @Date  2019/6/19
 * @Param
 * @return
 **/
public static void main(String[] args) {
    SpringApplication.run(SpringBootOApplication.class, args);
}

}

4.注:

启动类中添加 @EnableSwagger2注解,开启swagger;

对接口进行api文档注解,不进行注解也会由相关的api,但是没有接口的详细描述,只有开发人员可以看懂。

5.注解例如:
 1 @RestController
 2 @RequestMapping(value="/users")     // 通过这里配置使下面的映射都在/users下,可去除
 3 public class UserController {
 4     static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());
 5     @ApiOperation(value="获取用户列表", notes="")
 6     @RequestMapping(value={""}, method=RequestMethod.GET)
 7     public List<User> getUserList() {
 8         List<User> r = new ArrayList<User>(users.values());
 9         return r;
10     }
11     @ApiOperation(value="创建用户", notes="根据User对象创建用户")
12     @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
13     @RequestMapping(value="", method=RequestMethod.POST)
14     public String postUser(@RequestBody User user) {
15         users.put(user.getId(), user);
16         return "success";
17     }
18     @ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息")
19     @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")
20     @RequestMapping(value="/{id}", method=RequestMethod.GET)
21     public User getUser(@PathVariable Long id) {
22         return users.get(id);
23     }
24     @ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")
25     @ApiImplicitParams({
26             @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long"),
27             @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
28     })
29     @RequestMapping(value="/{id}", method=RequestMethod.PUT)
30     public String putUser(@PathVariable Long id, @RequestBody User user) {
31         User u = users.get(id);
32         u.setName(user.getName());
33         u.setAge(user.getAge());
34         users.put(id, u);
35         return "success";
36     }
37     @ApiOperation(value="删除用户", notes="根据url的id来指定删除对象")
38     @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")
39     @RequestMapping(value="/{id}", method=RequestMethod.DELETE)
40     public String deleteUser(@PathVariable Long id) {
41         users.remove(id);
42         return "success";
43     }
44 }

Swagger常用注解

  • @Api()用于类;
    表示标识这个类是swagger的资源
  • @ApiOperation()用于方法;
    表示一个http请求的操作
  • @ApiParam()用于方法,参数,字段说明;
    表示对参数的添加元数据(说明或是否必填等)
  • @ApiModel()用于类
    表示对类进行说明,用于参数用实体类接收
  • @ApiModelProperty()用于方法,字段
    表示对model属性的说明或者数据操作更改
  • @ApiIgnore()用于类,方法,方法参数
    表示这个方法或者类被忽略
  • @ApiImplicitParam() 用于方法
    表示单独的请求参数
  • @ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam

具体使用举例说明:
@Api()
用于类;表示标识这个类是swagger的资源
tags–表示说明
value–也是说明,可以使用tags替代
但是tags如果有多个值,会生成多个list

@ApiOperation() 用于方法;表示一个http请求的操作
value用于方法描述
notes用于提示内容
tags可以重新分组(视情况而用)

@ApiParam() 用于方法,参数,字段说明;表示对参数的添加元数据(说明或是否必填等)
name–参数名
value–参数说明
required–是否必填

@ApiModel()用于类 ;表示对类进行说明,用于参数用实体类接收
value–表示对象名
description–描述
都可省略

@ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改
value–字段说明
name–重写属性名字
dataType–重写属性类型
required–是否必填
example–举例说明

@ApiIgnore()用于类或者方法上,可以不被swagger显示在页面上
比较简单, 这里不做举例

@ApiImplicitParam() 用于方法
表示单独的请求参数

@ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam
name–参数ming
value–参数说明
dataType–数据类型
paramType–参数类型
example–举例说明

最后

更多参考精彩博文请看这里:倾宸的博客
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!***

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值