在集成Swagger之前,得先说说什么是Swagger,它是用来做什么的,然后再讲讲怎么集成,怎么使用,当然,在这之前,需要了解一下OpenAPI。

  OpenAPI 3.0规范定义了一个标准的、语言无关的RESTful APIs,它可以被人和机器所理解和使用,而不需要查找其源码、说明文档或其他方面。如果属性定义正确的话,消费者可以使用少量的逻辑代码与远程服务进行交互。可以使用OpenAPI的接口定义文件生成相应的文档、服务端接口、客户端接口和其他单元测试等等。

  简单的来说,就是通过这套规范,先定义接口,再根据定义文件生成相应语言的接口代码,之后可以来进行具体逻辑编写。一次定义,可多次使用。其定义的接口文档主要包含以下内容:

  1. 可访问的端点(endpoints )和每个端点的操作((GET /usersPOST /users);
  2. 每个端点的输入输出参数;
  3. 授权方式;
  4. 联系方式、团队名称、作者等其他信息;

  swagger是一个可以帮助你设计、构建代码、生成文档和测试API的工具集合,它是根据OpenAPI的规范具体实现的开源工具。包含以下几个工具:

  1. Swagger Editor:API设计器,基于浏览器的在线编辑器;
  2. Swagger UI :根据API的描述信息生成文档,可以查看和测试API;
  3. Swagger Codegen :根据API的设计文档,生成需要的服务端或客户端代码;

  使用它的意义主要在于,接口的规范化开发,文档的快速生成。开发最头疼的就是写文档,这样的话,可以省去大把的时间,而且,这样也利于团队的开发和新人的快速加入,也在系统集成时更加的方便。


  废话不多说,开始在Spring MVC中集成Swagger框架。

一、定义API接口文档

  我们不具体说明编写过程,使用Swagger提供的样例“宠物商店”(http://petstore.swagger.io/v2/swagger.json)。

二、使用代码生成工具生成Java代码

  代码构建工具Codegen(删改你介绍时有Github地址),我们先需要下载构建工具包:

wget http://central.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.0/swagger-codegen-cli-2.4.0.jar -O swagger-codegen-cli.jar

  具体使用方法,可参见其Github项目中的描述。生成代码命令:

java -jar swagger-codegen-cli-2.4..jar generate -i http://petstore.swagger.io/v2/swagger.json -l spring --library spring-mvc -o tmp

  参数-l时指语言类型,--library指的是使用的库,spring-mvc、spring-boot或者spring-cloud,默认生成spring-boot的代码。其中的目录截图:

  

  其中的配置目录,

  

三、引入Swagger的依赖包

 复制生成项目中pom的引用即可:

        <!--SpringFox dependencies -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox-version}</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox-version}</version>
</dependency>

四、合入代码

  将api和model下面的放入对应包结构下,但是configuration中的需要重新配置。因为项目已经配置了MVC,如果直接使用,则会初始化两次mvc的信息,故不使用WebMvcConfiguration和WebApplication两个类。SwaggerUiConfiguration类为配置的入口,里面含有Swagger的配置注解,需要再初始化MVC的时候,加载这个类。SwaggerDocumentationConfig类为Swagger文档的配置类,其中有api的包路径设置,设置正确才能解析出。为了防止启动时候,初始化spring的时候加载这些配置,这些类不能放到基础扫描包里面。再spring-mvc中添加配置想,单独加载SwaggerUiConfiguration类。

五、启动并访问

  如看到这些信息,则说明启动成功,可以访问:

  访问地址:http://localhost:8080/webapp/swagger-ui.html,效果如下:

六、增加配置项,上线后禁用Swagger-UI功能

  spring-mvc.xml中配置如下:

<import resource="classpath*:springfox-${springfox.swagger.mode:default}-swagger.xml"/>

  设置VM的启动变量,-Dspringfox.swagger.mode=dev,新增springfox-dev-swagger.xml配置文件,里面加载SwaggerUiConfiguration类。

本文中的代码和配置均已提交Github:https://github.com/FlowerBirds/JavaDemoApp,可以参考。

参考文档:

  • https://swagger.io/docs/specification/about/
  • https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md

Spring MVC集成Swagger2.0的更多相关文章

  1. Spring Boot 集成 Swagger2 与配置 OAuth2.0 授权

    Spring Boot 集成 Swagger2 很简单,由于接口采用了OAuth2.0 & JWT 协议做了安全验证,使用过程中也遇到了很多小的问题,多次尝试下述配置可以正常使用. Maven ...

  2. Spring MVC集成slf4j-logback

    转自: Spring MVC集成slf4j-logback 1.  Spring MVC集成slf4j-log4j 关于slf4j和log4j的相关介绍和用法,网上有很多文章可供参考,但是关于logb ...

  3. spring mvc集成velocity使用

    目前流行的三大页面视图神器是:老牌大哥jsp.后起之秀freemarker和velocity.这里不详细比较这三者的优劣,总体来说,jsp是标配,但后面两个更严格的执行了视图与业务的分离,页面里是不允 ...

  4. spring mvc 集成freemarker模板

    主要使用到的jar 文件:spring mvc +freemarker.jar 第一步:spring mvc 集成 freemarker <!-- 定义跳转的文件的前后缀 ,视图模式配置--&g ...

  5. spring mvc集成freemarker使用

    freemarker作为视图技术出现的比velocity早,想当年struts风靡一时,freemarker作为视图层也风光了一把.但现在velocity作为后起之秀的轻量级模板引擎,更容易得到青睐. ...

  6. Spring MVC集成Swagger

    什么是Swagger? 大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Servi ...

  7. Spring boot集成swagger2

    一.Swagger2是什么? Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格 ...

  8. Spring MVC集成Log4j

    以下示例显示如何使用Spring Web MVC框架集成LOG4J.首先使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态表单的Web应用程序: 创建一 ...

  9. Spring Boot 集成Swagger2生成RESTful API文档

    Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...

随机推荐

  1. 【leetcode389】389. Find the Difference

    异或 找不同 —.— public class Solution { public char findTheDifference(String s, String t) { char temp = 0 ...

  2. 查看 apache 的编译参数

    cat /home/oldboy/run/apache/build/config.nice 范例 2: [root@VM-002 ~]# cat /home/oldboy/run/apache/bui ...

  3. 被弃用的php函数以及用来替代的函数

    下面列举了部分被弃用的函数: call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_fun ...

  4. js - 基础 之 预编译总结

    js运行步骤 语法解析(检查有无语法错误) 预编译 解释运行(将 js 翻译成计算机识别的语言(0.1组成),翻译一行执行一行) 预编译 [全局]: 创建 GO( Grobal Object ) 对象 ...

  5. 一、redis安装、配置、命令

    一.安装 参见:redis中文官方文档 “http://www.redis.cn/download.html” 下载.解压.编译Redis $ wget http://download.redis.i ...

  6. 《Head First 软件开发》阅读一

    伟大的软件开发:让客户满意. 大多数项目的焦点:钱.时间. 我们需要交付的软件系统是需要客户满意,而你认为的完成并不是客户认为的完成. 如果我们不能确定客户需要的是什么,得回去问问他们.这是执行一个项 ...

  7. 软件的三大类型-单机类型、BS类型、CS类型

    单机类型:最开始的软件就是那些不需要联网的单机软件. CS类型:有的程序需要统一管理软件中使用的数据, 所以就将保存数据的数据库统一存放在一台主机中, 所有的用户在需要数据时都要从主机获取, 这时就分 ...

  8. jmeter录制对于ip代理会失效

    jmeter对于ip代理会失效,ip不能走代理,只有域名可以,因此如果需要用jmeter录制ip代理的请求,需要配置hosts访问,将ip转换成域名 如访问http://127.0.0.1:8080/ ...

  9. DB2常用指令

    1. 启动实例(db2inst1): db2start 2. 停止实例(db2inst1): db2stop 3. 列出所有实例(db2inst1) db2ilist 3-1.列出当前实例: db2 ...

  10. 数据库基本概念及Oracle基本语句

    一.数据库分类 通常是按照数据模型的特点将传统数据库系统分成网状数据库.层次数据库和关系数据库三种. 1.网状数据库 顾名思义,网状数据库采用的是以记录类型为结点的网状数据模型,是一种导航式(Navi ...