Spring MVC中使用Swagger生成API文档和完整项目示例Demo,swagger-server-api

来源:互联网 发布:淘宝食品没有证能吗 编辑:程序博客网 时间:2024/05/04 04:41

转自:http://blog.csdn.net/fansunion/article/details/51923720和http://blog.csdn.net/wangnan9279/article/details/44541665和

https://www.2cto.com/kf/201502/376959.html

这里只做备份

集成示例demo下载:http://download.csdn.net/download/wqc19920906/10042478

swagger-ui下载:http://download.csdn.net/download/wqc19920906/10042745

swagger2.0版本以上的使用教程尚未整理,详情见官网。

前言

Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。本文简单介绍了在项目中集成swagger的方法和一些常见问题。如果想深入分析项目源码,了解更多内容,见参考资料。

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。

一、使用介绍

什么是 Swagger?

Swagger™的目标是为REST APIs 定义一个标准的,与语言无关的接口,使人和计算机在看不到源码或者看不到文档或者不能通过网络流量检测的情况下能发现和理解各种服务的功能。当服务通过Swagger定义,消费者就能与远程的服务互动通过少量的实现逻辑。类似于低级编程接口,Swagger去掉了调用服务时的很多猜测。 
浏览 Swagger-Spec 去了解更多关于Swagger 项目的信息,包括附加的支持其他语言的库。

如何集成Swagger-springmvc到我们的项目中?

依赖:

Maven
<dependency><groupId>com.mangofactory</groupId><artifactId>swagger-springmvc</artifactId><version>0.9.4</version></dependency>
Gradle
repositories {jcenter()}compile "com.mangofactory:swagger-springmvc:0.9.4"

使用:

要最快捷地启动swagger-springmvc项目并且使用默认设置,推荐的方式是使用SwaggerSpringMvc插件

Spring Java Configuration

@Configuration@EnableWebMvc@EnableSwagger@ComponentScan("com.myapp.packages")public class WebAppConfig { ...}

Spring xml Configuration

<mvc:annotation-driven/> <!-- Required so swagger-springmvc can access spring's RequestMappingHandlerMapping  --><bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />

SwaggerSpringMvcPlugin XML Configuration

为了使用这个插件,你需要创造一个spring java配置类。使用spring的 @Configuration ,这个配置类必须被定义到你的xml上下文

<!-- Required so swagger-springmvc can access spring's RequestMappingHandlerMapping  --><mvc:annotation-driven/>


<bean class="com.yourapp.configuration.MySwaggerConfig"/>@Configuration@EnableSwagger //Loads the spring beans required by the frameworkpublic class MySwaggerConfig {private SpringSwaggerConfig springSwaggerConfig;/*** Required to autowire SpringSwaggerConfig*/@Autowiredpublic 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. */@Beanpublic SwaggerSpringMvcPlugin customImplementation(){  return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)          .includePatterns(".*pet.*");}}

SwaggerSpringMvcPlugin Spring Java Configuration

使用@EnableSwagger注解 
自动注入SpringSwaggerConfig 
定义一个或多个SwaggerSpringMvcPlugin实例,通过springs @Bean注解

@Configuration@EnableWebMvc@EnableSwagger@ComponentScan("com.myapp.controllers")public class CustomJavaPluginConfig {private SpringSwaggerConfig springSwaggerConfig;@Autowiredpublic void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {  this.springSwaggerConfig = springSwaggerConfig;}@Bean //Don't forget the @Bean annotationpublic SwaggerSpringMvcPlugin customImplementation(){  return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)        .apiInfo(apiInfo())        .includePatterns(".*pet.*");}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;}}

二、碰到的问题

关于@API注解

在Swagger Annotation中: 

API表示一个开放的API,可以通过description简要描述该API的功能。 
在一个@API下,可有多个@ApiOperation,表示针对该API的CRUD操作。在ApiOperation Annotation中可以通过value,notes描述该操作的作用,response描述正常情况下该请求的返回对象类型。 
在一个ApiOperation下,可以通过ApiResponses描述该API操作可能出现的异常情况。 

ApiParam用于描述该API操作接受的参数类型

再接着,为项目的Model对象添加Swagger Annotation,这样Swagger Scanner可以获取更多关于Model对象的信息。

@ApiModel(value = "A SayingRepresentation is a representation of greeting")@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)public class SayingRepresentation {private long id;@ApiModelProperty(value = "greeting content", required = true)private String content;public SayingRepresentation(long id, String content) {    this.id = id;    this.content = content;}public long getId() {    return id;}public String getContent() {    return content;}

通过上面的步骤,项目已经具备了提供Swagger格式的API信息的能力,接下来,我们把这些信息和Swagger UI集成,以非常美观,实用的方式把这些API信息展示出来。

和Swagger UI的集成

首先,从github(https://github.com/wordnik/swagger-ui)上下载Swagger-UI, 把该项目dist目录下的内容拷贝到项目的resources的目录assets下。


然后,修改index.html, 把Swagger UI对象中的URL替换为自己的API路径。

  window.swaggerUi = new SwaggerUi({  url: "/api/api-docs",  dom_id: "swagger-ui-container",

最后,为了能访问到该页面,还需要在Service的Initialize方法中,添加AssetsBundle

public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) {    //指定配置文件的名字    bootstrap.setName("helloWorld");    bootstrap.addBundle(new AssetsBundle("/assets", "/", "index.html"));}

最后的效果图: 



二:Swagger与Spring MVC集成步骤

1.Maven关键配置

        
[html] view plain copy
  1. <dependency>  
  2.             <groupId>com.mangofactory</groupId>  
  3.             <artifactId>swagger-springmvc</artifactId>  
  4.             <version>1.0.2</version>  
  5.         </dependency>  
  6.   
  7.  <dependency>  
  8.         <groupId>org.springframework</groupId>  
  9.         <artifactId>spring-webmvc</artifactId>  
  10.         <version>4.1.6.RELEASE</version>  
  11.       </dependency>  


2. 插件配置
   CustomJavaPluginConfig

3.复制swagger的相关js等静态资源到webapp目录。
   swagger-ui.js之类的。
   我copy过一次,但是有问题,最后从网上下载了一个项目,可以直接用的那种。
   然后自己再逐步改造。

4.启动项目
   http://localhost:8080/



三、常见swagger注解一览与使用
最常用的5个注解

@Api:修饰整个类,描述Controller的作用

@ApiOperation:描述一个类的一个方法,或者说一个接口

@ApiParam:单个参数描述


@ApiModel:用对象来接收参数

@ApiProperty:用对象接收参数时,描述对象的一个字段


其它若干

@ApiResponse:HTTP响应其中1个描述

@ApiResponses:HTTP响应整体描述


@ApiClass

@ApiError

@ApiErrors


@ApiParamImplicit

@ApiParamsImplicit


三、评价

Swagger可以充当前后端交流的重要桥梁,方便快捷。很实用。

Swagger项目允许你生产,显示和消费你自己的RESTful服务。不需要代理和第三方服务。是一个依赖自由的资源集合,它能通过Swagger API动态的生成漂亮的文档和沙盒,因为Swagger UI没有依赖,你可以把他部署到任何服务器环境或者是你自己的机器。

四、参考资料

官网:http://swagger.io/

GitHub:

swagger-springmvc:https://github.com/martypitt/swagger-springmvc

swagger-ui:https://github.com/swagger-api/swagger-ui

swagger-core:https://github.com/swagger-api/swagger-core

swagger-spec:https://github.com/swagger-api/swagger-spec

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果7p照相死机怎么办 小米手机qq打不开怎么办啊 电脑qq老是闪退怎么办 微信摄像卡住了怎么办 电脑打开应用程序没反应怎么办 宇飞来手机锁了怎么办 宇飞来手机忘记密码怎么办 vivo手机突然开不了机怎么办 苹果六关不了机怎么办 微信老是无响应怎么办 打游戏被骂了怎么办 微信运动跳转排行榜失败怎么办 小恩爱账号忘了怎么办 华为账号更换后游戏账号怎么办 注册游戏账号需要身份证怎么办 英雄联盟被裁决了怎么办 百度网盘密码重置不了怎么办 sap密码输入被锁怎么办 dnf二级密码错10怎么办 大网卡网速慢了怎么办 小米路由器无线速度慢怎么办 小米手机无线速度慢怎么办 电脑网卡驱动没了怎么办 电脑显示网卡驱动不正常怎么办 微信别人拒收消息怎么办 电脑无线网卡速度慢怎么办 网吧吃鸡更新慢怎么办 手机号注册不了微信怎么办 小米账号密码忘了怎么办 小米手机账号密码忘了怎么办 华为手机账号密码忘记了怎么办 老年机开不了机怎么办 天谕没有顺网登陆怎么办 苹果密保问题忘了怎么办 密保手机没用了怎么办 qq密保手机没用了怎么办 手机开机按钮坏了怎么办 改了账号游戏角色消失怎么办 华为开机键坏了怎么办 抖音账号已重置怎么办 抖音账号被重置怎么办