`
m635674608
  • 浏览: 5027908 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Restful形式接口文档生成之Swagger与SpringMVC整合手记

 
阅读更多

 笔者目前正在搭建一套API服务框架,考虑到客户端能够更方便的调用API服务(这里说的更方便是指避免不厌其烦地解说各接口需要的参数和返回结 果),于是决心为每个接口生成详细的说明文档。网上搜索了一下,发现了Swagger这个东西,感觉不错,界面也比javadoc生成的页面要美观,而且 网上关于Swagger和springmvc整合的文章不少(遗憾的是大多雷同且不完整)。本文详细介绍Swagger和SpringMVC的整合过程, 重点是弥补现有文章的遗漏之处(很关键的哦!)。让我们一起来学习如何使用Swagger来生成接口文档吧!

  既然是整合Swagger,那么前提是你已经使用SpringMVC搭建了一套接口服务, 无论繁简,只要可用就行。关于接口文档生成工具,大家在网上搜索的时候,可能会发现另外一个工具:springfox。网上关于springfox和 spring整合的文章也非常多的呀。那springfox和swagger是什么关系呢?引用springfox官方的语录:

Springfox has evolved from a project originally created by Marty Pitt and was named swagger-springmvc. 

  这段英文很简单,不懂的读者对照在线词典也可以翻译出来,加油!言归正传,先简单介绍下项目环境:

  • JDK1.7
  • Spring 3.2.2
  • swagger-springmvc 1.0.2 (最新版本)

一、依赖管理

  在整合之前,需要把所有使用到的依赖包全部引入。网上很多文章只是简单告诉读者引入swagger-springmvc-1.0.2.jar包,但是随后你发现这远远不够,还需要很多包,如下所示:

<!-- swagger-springmvc -->
    <dependency>
        <groupId>com.mangofactory</groupId>
        <artifactId>swagger-springmvc</artifactId>
        <version>1.0.2</version>
    </dependency>
    <dependency>
        <groupId>com.mangofactory</groupId>
        <artifactId>swagger-models</artifactId>
        <version>1.0.2</version>
    </dependency>
    <dependency>
        <groupId>com.wordnik</groupId>
        <artifactId>swagger-annotations</artifactId>
        <version>1.3.11</version>
    </dependency>
    <!-- swagger-springmvc dependencies -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>15.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.4.4</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.4.4</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.4.4</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml</groupId>
        <artifactId>classmate</artifactId>
        <version>1.1.0</version>
    </dependency>

  以上是比较完整的依赖列表,本文搭建的项目可以正常运行。读者可能会有疑问,maven管理的依赖包不是具有传递性吗?是的,是有传递性,但是传递性是根据<scope>来界定的。打开swagger-springmvc依赖包的pom文件可以发现,其很多依赖包的scope值为compile或者provider,不会根据传递性自动引入。

二、Swagger配置

  Swagger的配置实际上就是自定义一个Config类,通过java编码的方式实现配置。代码如下:

import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.models.dto.ApiInfo;
import com.mangofactory.swagger.plugin.EnableSwagger;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Created by xiaohui on 2016/1/14.
 */
@Configuration
@EnableSwagger
public class SwaggerConfig {

    private SpringSwaggerConfig springSwaggerConfig;

    /**
     * Required to autowire SpringSwaggerConfig
     */
    @Autowired
    public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig)
    {
        this.springSwaggerConfig = springSwaggerConfig;
    }

    /**
     * Every SwaggerSpringMvcPlugin bean is picked up by the swagger-mvc
     * framework - allowing for multiple swagger groups i.e. same code base
     * multiple swagger resource listings.
     */
    @Bean
    public SwaggerSpringMvcPlugin customImplementation()
    {
        return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
                .apiInfo(apiInfo())
                .includePatterns(".*?");
    }

    private ApiInfo apiInfo()
    {
        ApiInfo apiInfo = new ApiInfo(
                "My Apps API Title",
                "My Apps API Description",
                "My Apps API terms of service",
                "My Apps API Contact Email",
                "My Apps API Licence Type",
                "My Apps API License URL");
        return apiInfo;
    }
}

  上面这段代码是从网络上找到的,你也肯定找到了,对吧!但是,你会发现一个问题:SpringSwaggerConfig无法注入。这是为什么呢?其实很简单,因为spring容器里没有SpringSwaggerConfig类型的对象。解决办法:在springmvc的配置文件中加入以下配置即可。

<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />

  到目前为止,我们已经完成了对所有接口方法的扫描解析功能,那解析得到什么内容呢?这需要我们自定义,自定义操作的对象就是接口方法。先看段代码:

/**
 * 根据用户名获取用户对象
 * @param name
 * @return
 */
@RequestMapping(value="/name/{name}", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "根据用户名获取用户对象", httpMethod = "GET", response = ApiResult.class, notes = "根据用户名获取用户对象")
public ApiResult getUserByName(@ApiParam(required = true, name = "name", value = "用户名") @PathVariable String name) throws Exception{
    UcUser ucUser = ucUserManager.getUserByName(name);

    if(ucUser != null) {
        ApiResult<UcUser> result = new ApiResult<UcUser>();
        result.setCode(ResultCode.SUCCESS.getCode());
        result.setData(ucUser);
        return result;
    } else {
        throw new BusinessException("根据{name=" + name + "}获取不到UcUser对象");
    }
}

  上述代码是Controller中的一个方法,@ApiOperation注解对这个方法进行了说明,@ApiParam注解对方法参数进行了说明。关于这两个注解的使用,可以参看源码。这样子,Swagger就可以扫描接口方法,得到我们自定义的接口说明内容。

三、Swagger-UI配置

  Swagger扫描解析得到的是一个json文档,对于用户不太友好。下面介绍swagger-ui,它能够友好的展示解析得到的接口说明内容。

  从https://github.com/swagger-api/swagger-ui 获取其所有的 dist 目录下东西放到需要集成的项目里,本文放入 src/main/webapp/WEB-INF/swagger/ 目录下。

  修改swagger/index.html文件,默认是从连接http://petstore.swagger.io/v2 /swagger.json获取 API 的 JSON,这里需要将url值修改为http://{ip}:{port}/{projectName}/api-docs的形式,{}中的值根据自身情 况填写。比如我的url值为:http://localhost:8083/arrow-api/api-docs

  因为swagger-ui项目都是静态资源,restful形式的拦截方法会将静态资源进行拦截处理,所以在springmvc配置文件中需要配置对静态文件的处理方式。

//所有swagger目录的访问,直接访问location指定的目录
<mvc:resources mapping="/swagger/**" location="/WEB-INF/swagger/"/>

  OK!大功告成,打开浏览器直接访问swagger目录下的index.html文件,即可看到接口文档说明了。注意访问地址哦!看下图:

文章作者:xiaohui249
本文链接:http://javatech.wang/index.php/archives/74/

分享到:
评论
2 楼 duanhaijie 2017-01-11  
http://blog.csdn.net/duanjiajia/article/details/54341590 这个上面是的很详细,从配置到汉化,到可能遇到的问题
1 楼 愁滋味 2016-09-18  
都是千篇一律的,能给个demo吗?

相关推荐

    swagger整合SpringMvc生成Restful api

    swagger提供的接口文档相比传统的文档方式更加直观也更加高效,但是在网上找了很多关于Swagger与SpringMvc整合的资料,发现都比较繁琐,不是很满意,于是有了这篇博客,希望对大家有所帮助。教程:...

    Swagger与SpringMVC项目整合jar包

    Swagger是一款强大的API...总的来说,Swagger与SpringMVC的整合,为API开发提供了便利,使得API的创建、测试和文档化变得更加简单和高效。通过正确配置和使用Swagger,开发者可以构建出易于理解和使用的RESTful服务。

    Swagger与SpringMVC项目整合相关jar包

    下面我们将详细探讨Swagger与SpringMVC的整合以及相关的jar包。 首先,Swagger的核心组件是`Swagger-Core`,它负责解析Java注解并构建API的模型。在SpringMVC项目中,我们需要引入`springfox-swagger2`和`springfox...

    swagger整合springMVC源码

    Swagger 是一个强大的API文档生成工具,它允许开发者通过注解的方式在代码中描述RESTful API接口,然后自动生成相应的文档,极大地简化了API接口的文档编写工作。SpringMVC是Spring框架的一部分,专门用于处理HTTP...

    swagger-springmvc-1.0.2

    Swagger SpringMVC 1.0.2 是一个用于构建RESTful API文档的强大工具,它将API的接口定义、文档化和测试集于一体。这个版本的Swagger整合了SpringMVC框架,使得开发者能够更加便捷地在Spring应用中实现API的自动生成...

    Swagger与Spring结合生成Restful接口文档

    总结来说,Swagger与Spring的结合使得开发RESTful API变得更加便捷,通过注解的方式就能自动生成详细的接口文档,提高了开发效率,也方便了团队协作和对外服务的使用。同时,`apidoc`目录中的文档可以帮助我们更好地...

    restful接口文档模板

    - 表明文档的主要内容是关于RESTful接口的设计与规范,适用于服务端开发人员。 - **描述**:“RESTFUL接口文档模板,样式好看的接口文档模板,docx格式” - 指出该文档模板不仅内容全面,而且在格式上进行了优化...

    SpringMVC 集成 Swagger2

    本文将详细介绍如何在SpringMVC项目中集成Swagger2,以实现API的自动化文档生成。 首先,我们需要了解Swagger2的核心组件。Swagger2的核心是`@Api`和`@ApiOperation`注解,它们用于标记API接口和方法,以便Swagger...

    swagger整合Spring Boot生成Restful接口文档

    而Swagger是目前最流行的接口文档解决方案,本文主要通过代码实战的方式讲解Spring Boot 和Swagger集成生成Restful接口文档。教程参见 http://blog.csdn.net/zjx2016/article/details/74407832

    SpringMVC如何在生产环境禁用Swagger的方法

    Swagger 的主要功能是生成接口文档,并提供了一个测试接口的平台。它可以直接通过代码中的注解生成接口文档(JavaEE),这使得开发和测试变得更加方便。Swagger 还提供了一个漂亮的用户界面,方便开发者和测试人员...

    swaggerui结合springmvc生成文档

    6. **文档生成**:Swagger 还支持生成静态的 YAML 或 JSON 文档,这对于分享和离线查看 API 文档非常有用。你可以通过特定的端点来获取这些格式的文档。 通过这样的集成,开发者可以快速地为 Spring MVC 应用提供高...

    tp5框架开发的restful API接口自动生成文档源码.zip

    对于自动文档生成,这通常涉及到API文档工具的使用,如apidoc.js或 Swagger。这些工具可以从注释或特定的规范文件中解析API的信息,自动生成易于理解和使用的文档。在TP5项目中,开发者可以在控制器方法上方添加注释...

    SpringMvc整合swagger2 .docx下载

    ### Spring MVC 整合 Swagger2 实现在线 API 文档测试 在现代软件开发过程中,API 文档对于提高团队协作效率、降低系统维护成本至关重要。Swagger 是一个非常流行的框架,能够帮助开发者快速创建、记录和使用 ...

    swagger集成springMVC简单示例

    在这个"swagger集成springMVC简单示例"中,我们将探讨如何将Swagger整合到Spring MVC框架中,以便自动化地生成API文档,提高开发效率。 首先,Swagger的核心组件是`Swagger-core`,它提供了注解,允许我们在Java...

    swagger+Springmvc集成

    Swagger 是一个强大的 API 工具,它可以为 RESTful API 提供一套规范化的定义,以及一个交互式的文档界面,使得开发者能够轻松地了解和测试 API。而 Springmvc 是 Spring 框架的一部分,用于构建 MVC(Model-View-...

    swagger-springmvc

    "swagger-springmvc"项目就是Swagger与Spring MVC整合的一个实现,允许开发者在Spring应用中无缝地集成Swagger的功能。 "swagger-annotations-1.3.11"是Swagger的注解库,它提供了一系列的Java注解,例如`@Api`、`@...

    swagger生成html离线接口文档

    Swagger UI是一个基于Web的工具,它可以解析Swagger Spec文件并生成用户友好的接口文档,用户可以通过它来浏览、测试和理解API。 Spring Boot与Swagger 2的集成使得在Java环境中使用Swagger变得更加简单。`...

    springmvc整合swagger所需jar包

    Swagger与Spring MVC的整合可以让开发者轻松地创建、管理和展示API,提供友好的API文档,便于其他开发者理解和使用。 在进行Spring MVC与Swagger的整合时,需要确保使用兼容的jar包版本。Spring MVC的版本与Swagger...

    swagger springmvc集成jar

    在Java后端开发中,Swagger与Spring MVC的集成可以帮助开发者快速创建、管理和展示API,使得API的使用者可以方便地了解接口的功能和调用方式。 Swagger的核心组件是Swagger-UI和Swagger-Annotations。Swagger-UI是...

    SwaggerUI+SpringMVC构建RestFulAPI的可视化界面

    将Swagger与SpringMVC整合,通常需要以下步骤: 1. **添加依赖**:在你的Maven项目的`pom.xml`文件中,引入Swagger的相关依赖,如`springfox-swagger2`和`springfox-swagger-ui`。 2. **配置Swagger**:在...

Global site tag (gtag.js) - Google Analytics