Swagger2 整合springboot 2.X

swagger是什么?

随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。
前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要,swagger就是一款让你更好的书写API文档的框架。

swagger优点?

  • 完全实现了前后端交互的实时性,可以随时对更改的接口文档进行查看,防止出现调用接口失误。
  • 前端人员可以自行在网站上进行测试
  • 可以自动生成你想要的语言模式,便于切换

框架说明及使用

现在SWAGGER官网主要提供了几种开源工具,提供相应的功能。可以通过配置甚至是修改源码以达到你想要的效果。

  • Swagger Codegen
    通过Codegen 可以将描述文件生成html格式和cwiki形式的接口文档,同时也能生成多钟语言的服务端和客户端的代码。支持通过jar包,docker,node等方式在本地化执行生成。也可以在后面的Swagger Editor中在线生成。
  • Swagger UI
    提供了一个可视化的UI页面展示描述文件。接口的调用方、测试、项目经理等都可以在该页面中对相关接口进行查阅和做一些简单的接口请求。该项目支持在线导入描述文件和本地部署UI项目。
  • Swagger Editor
    类似于markendown编辑器的编辑Swagger描述文件的编辑器,该编辑支持实时预览描述文件的更新效果。也提供了在线编辑器和本地部署编辑器两种方式。
  • Swagger Inspector
    感觉和postman差不多,是一个可以对接口进行测试的在线版的postman。比在Swagger UI里面做接口请求,会返回更多的信息,也会保存你请求的实际请求参数等数据。
  • Swagger Hub
    集成了上面所有项目的各个功能,你可以以项目和版本为单位,将你的描述文件上传到Swagger Hub中。在Swagger Hub中可以完成上面项目的所有工作,需要注册账号,分免费版和收费版。

注:Springfox Swagger: Spring 基于swagger规范,可以将基于SpringMVC和Spring Boot项目的项目代码,自动生成JSON格式的描述文件。本身不是属于Swagger官网提供的,在这里列出来做个说明,方便后面作一个使用的展开。

Springboot 2.X 整合 Swagger2

  1. 添加maven 依赖
 <!-- swagger框架 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.7.0</version>
    </dependency>

@Configuration
@EnableSwagger2
public class Swagger2Config {

/**
 * 创建swagger ui的摘要
 *
 * @return
 */
@Bean
public Docket docket() {
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            // 扫描的class的包路径
.apis(RequestHandlerSelectors.basePackage("com.wangyq.boot.controller"))
            // 只扫描类上有API注解的class
            // .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
            // 只扫描方法上有ApiOperation注解的方法                         //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
            .paths(PathSelectors.any())
            .build();
}

/**
 * swagger ui的标题信息
 *
 * @return
 */
private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
            .title("标题")
            .description("副标题")
            .version("1.0")
            .build();

}

}

  1. 添加注解

@Controller
@RequestMapping("/test")
@Api(value = "/test", description = "Operations about test", tags = "测试管理")
public class TestController extends BaseController {
    private Logger logger = LoggerFactory.getLogger(TestController.class);

    @RequestMapping(value = "/testRateLimit5", method = {RequestMethod.GET})
    @ResponseBody
    @RateLimit(limitNum = 2)
    @ApiOperation(value = "测试接口限流", notes = "每秒钟限流5 token", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "data", value = "返回的数据对象", dataType = "Object"),
            @ApiImplicitParam(name = "msg", value = "消息", dataType = "String"),
            @ApiImplicitParam(name = "code", value = "状态码", dataType = "Integer")
    })
    public Result testRateLimit5() {
        logger.info("调用了 testRateLimit5 方法");
        return ResultUtil.success("调用了 testRateLimit5 方法!");
    }

    @GetMapping(value = "/testRateLimit10")
    @RateLimit(limitNum = 10)
    public Result testRateLimit10() {
        logger.info("调用了 testRateLimit10 方法");
        return ResultUtil.success("调用了 testRateLimit10 方法!");
    }
}
  1. 启动springboot项目,访问http://[ip]:[port]/swagger-ui.html,如:http://localhost:8080/swagger-ui.html
Image.png

swagger在spring中常用注解说明

  • Api、ApiIgnore
  • ApiModel
  • ApiModelProperty
  • ApiOperation
  • ApiParam、ApiImplicitParam、ApiImplicitParams
  • ApiResponse
  • ApiResponses
  • ResponseHeader
  1. @Api
    Api注解用于类上,说明该类的作用。可以标记一个Controller类做为swagger 文档资源。与Controller注解并列使用。
    @Api(value = "/test", description = "Operations about test", tags = "测试管理") @Controller
    @Api.png
  1. ApiModel
    ApiModel注解用于表示对类进行说明,描述一个Model的信息,表示参数用实体类接收。

  2. ApiModelProperty
    ApiModelProperty注解用于方法、字段,表示对model属性的说明或者数据操作更改,配合ApiModel一起使用。

  3. ApiOperation
    ApiOperation注解,用在方法上,说明方法的作用,与Controller中的方法并列使用。


    ApiOperation.png
  1. ApiImplicitParams
    ApiImplicitParams注解用于方法上包含一组参数说明。

  2. ApiParam
    ApiParam注解用在@ApiImplicitParams的方法里边,属性配置:


    @ApiParam.png
  1. ApiImplicitParam
    ApiImplicitParam注解用于描述请求参数,根据不同的paramType类型,请求的参数来源不同。属性及取值如下:


    @ApiImplicitParam.png
  1. ApiResponse
    ApiResponse注解用于响应配置,与Controller中的方法并列使用。属性配置:


    ApiResponse.png
  1. ApiResponses
    ApiResponses注解中包含ApiResponse,用于描述一组ApiResponse值。

  2. ResponseHeader
    ResponseHeader注解用于设置响应头,与Controller中的方法并列使用。 属性配置:


    ResponseHeader.png
  1. ApiIgnore
    ApiIgnore注解用于类或方法上,表示不需要swagger处理。

友情链接

swagger官网地址

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容