前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >REST API文档工具Swagger2,以及与SpringBoot的集成

REST API文档工具Swagger2,以及与SpringBoot的集成

作者头像
飞狗
发布2018-09-10 11:49:16
9560
发布2018-09-10 11:49:16
举报

手写Api文档的几个痛点:

  • 前后端联调接口,需要不断的更新接口文档,一般是文档跟不上接口变化的节奏;
  • 接口返回结果不明确;
  • 不能直接在线测试接口,通常需要使用工具,比如postman、jmeter;
  • 接口文档太多,不好管理;

Swagger简介

swagger是一个API框架,号称世界上最流行的API工具。它提供了API管理的全套解决方案,比如API在线编辑器,APIUI展示界面,代码生成器等诸多功能。 Swagger官方地址

Springfox简介

如果想引入swagger进行API管理。目前springfox是一个很好的选择,它内部会自动解析Spring容器中Controller暴露出的接口,并且也提供了一个界面用于展示或调用这些API。 Springbox官方地址

Maven依赖

代码语言:javascript
复制
<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>       

Swagger配置类

代码语言:javascript
复制
package com.lx;

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.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
public class Swagger2 {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.lx.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("springboot利用swagger构建api文档")
                .description("简单优雅的restfun风格")
                .termsOfServiceUrl("")
                .version("1.0")
                .build();
    }
}

Application.class 加上注解@EnableSwagger2 表示开启Swagger

代码语言:javascript
复制
package com.lx;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@EnableSwagger2
@MapperScan("com.lx.mapper")
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
}

REST API接口增加Swagger注释

代码语言:javascript
复制
@Controller
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    @ApiOperation(value="添加用户信息", notes="添加用户信息")
    @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true)
    @ResponseBody
    @RequestMapping(value = "/add", produces = {"application/json;charset=UTF-8"}, method = RequestMethod.POST)
    public int addUser(User user){
        return userService.addUser(user);
    }

    @ApiOperation(value="查看信息", notes="查看用户信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "pageNum", value = "页码", required = true, dataType = "int"),
            @ApiImplicitParam(name = "pageSize", value = "每页个数", required = true, dataType = "int")
    })
    @ResponseBody
    @RequestMapping(value = "/all/{pageNum}/{pageSize}", produces = {"application/json;charset=UTF-8"}, method = RequestMethod.GET)
    public Object findAllUser(@PathVariable("pageNum") int pageNum, @PathVariable("pageSize") int pageSize){

        return userService.findAllUser(pageNum,pageSize);
    }
}

Swagger2文档

启动SpringBoot,打开url http://127.0.0.1:8080/swagger-ui.html#/

Swagger REST API页面

注解

@Api

用在类上,说明该类的作用

代码语言:javascript
复制
@Api(value = "UserController", description = "用户相关api")

@ApiOperation

用在方法上,说明方法的作用

代码语言:javascript
复制
@ApiOperation(value = "查找用户", notes = "查找用户", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

@ApiImplicitParams

用在方法上包含一组参数说明

@ApiImplicitParam

用在@ApiImplicitParams注解中,指定一个请求参数的各个方面 paramType:参数放在哪个地方

代码语言:javascript
复制
header–>请求参数的获取:@RequestHeader
query–>请求参数的获取:@RequestParam
path(用于restful接口)–>请求参数的获取:@PathVariable
body(不常用)
form(不常用)

name:参数名 dataType:参数类型 required:参数是否必须传 value:参数的意思 defaultValue:参数的默认值

代码语言:javascript
复制
@ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "唯一id", required = true, dataType = "Long", paramType = "path"),
})

@ApiResponses

用于表示一组响应

@ApiResponse

用在@ApiResponses中,一般用于表达一个错误的响应信息 code:数字,例如400 message:信息,例如”请求参数没填好” response:抛出异常的类

代码语言:javascript
复制
@ApiResponses(value = {
        @ApiResponse(code = 400, message = "No Name Provided")  
    })

@ApiModel

Swagger-core builds the model definitions based on the references to them throughout the API introspection. The @ApiModel allows you to manipulate the meta data of a model from a simple description or name change to a definition of polymorphism. 描述一个Model的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)

代码语言:javascript
复制
@ApiModel(value = "用户实体类")

@ApiModelProperty

描述一个model的属性

代码语言:javascript
复制
@ApiModelProperty(value = "登录用户")
@ApiIgnore //使用这个注解忽略这个接口
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 手写Api文档的几个痛点:
  • Swagger简介
  • Springfox简介
  • Maven依赖
  • Swagger配置类
  • REST API接口增加Swagger注释
  • Swagger2文档
  • 注解
    • @ApiOperation
      • @ApiImplicitParams
        • @ApiImplicitParam
          • @ApiResponses
            • @ApiResponse
              • @ApiModel
                • @ApiModelProperty
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档