swagger详解

1快速环境搭建

pom.xml文件中添加如下内容(看清楚再复制,此处不是全部内容)

 1 <properties>
 2         ...
 3         <swagger.version>2.2.2</swagger.version>
 4         ...
 5     </properties>
 6 
 7         <dependency>
 8             <groupId>io.springfox</groupId>
 9             <artifactId>springfox-swagger2</artifactId>
10             <version>${swagger.version}</version>
11         </dependency>
12         <dependency>
13             <groupId>io.springfox</groupId>
14             <artifactId>springfox-swagger-ui</artifactId>
15             <version>${swagger.version}</version>
16         </dependency>

在config目录中新建swagger的配置文件swaggerConfig.java

 1 @EnableSwagger2
 2 @Configuration
 3 public class SwaggerConfig {
 4 
 5     @Bean
 6     public Docket createRestApi() {
 7         return new Docket(DocumentationType.SWAGGER_2)
 8                 .apiInfo(apiInfo())
 9                 .select()
10                 .apis(RequestHandlerSelectors.basePackage("com"))//扫描com路径下的api文档
11                 .paths(PathSelectors.any())//路径判断
12                 .build();
13     }
14 
15     private ApiInfo apiInfo() {
16         return new ApiInfoBuilder()
17                 .title("《----我是title-----》")//标题
18                 .description("《-----我是描述----》:http://www.google.com.hk")//描述
19                 .termsOfServiceUrl("http://www.google.com.hk")//(不可见)条款地址
20                 .contact(new Contact("zz","google.com.hk","123@qq.com"))//作者信息
21                 .version("6.6.6")//版本号
22                 .build();
23     }
24 
25 }

新建实体类User,基本字段如下

 1 @ApiModel(value = "User得实体,----》",reference = "我是参考")
 2 public class User {
 3 
 4     @ApiParam(value = "姓名--------------",required = true)
 5     private String name;
 6     //在swagger-ui.html#页面中如果返回User,ModelModel Schema选项卡可见
 7     @ApiModelProperty(value = "id",dataType = "String")
 8     private String id;
 9      //在http://localhost:8080/v2/api-docs最后一行的实体可见
10     @ApiModelProperty(value = "年龄----------",required = true)
11     private Integer age;
12 
13     ...此处省略set和get方法
14 }

在controller包立新建TestController,内容如下

 1 @Api(value = "API - VehiclesController", description = "用户接口详情")
 2 @RestController
 3 @RequestMapping("/test")
 4 public class TestController {
 5 
 6     static Map<String, User> users = Collections.synchronizedMap(new HashMap<String,User>());
 7 
 8 
 9     @ApiOperation(value="获取用户列表", notes="")
10     @ApiResponses(value = {
11             @ApiResponse(code = 200, message = "Successful — 请求已完成"),
12             @ApiResponse(code = 400, message = "请求中有语法问题,或不能满足请求"),
13             @ApiResponse(code = 401, message = "未授权客户机访问数据"),
14             @ApiResponse(code = 404, message = "服务器找不到给定的资源;文档不存在"),
15             @ApiResponse(code = 500, message = "服务器不能完成请求")}
16     )
17     @RequestMapping(value={""}, method= RequestMethod.GET)
18     public List<User> getUserList() {
19         List<User> r = new ArrayList<User>(users.values());
20         return r;
21     }
22 
23     ....此处省略n行代码
24 }

浏览改地址,访问主页面:http://localhost:8080/swagger-ui.html# 
浏览改地址,访问sagger专有jsonAPI: http://localhost:8080/v2/api-docs

2常用注释描述

3全部注释列表

@Api 
Api 标记可以标记一个Controller类做为swagger 文档资源,使用方式

@Api 
Api 标记可以标记一个Controller类做为swagger 文档资源,使用方式

属性名称备注
valueurl的路径值
tags如果设置这个值、value的值会被覆盖
description对api资源的描述
basePath基本路径可以不配置
position如果配置多个Api 想改变显示的顺序位置
producesFor example, “application/json, application/xml”
consumesFor example, “application/json, application/xml”
protocolsPossible values: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true 将在文档中隐藏

@ApiOperation每一个url资源的定义,使用方式

属性名称备注
valueurl的路径值
tags如果设置这个值、value的值会被覆盖
description对api资源的描述
basePath基本路径可以不配置
position如果配置多个Api 想改变显示的顺序位置
producesFor example, “application/json, application/xml”
consumesFor example, “application/json, application/xml”
protocolsPossible values: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true 将在文档中隐藏
response返回的对象
responseContainer这些对象是有效的 “List”, “Set” or “Map”.,其他无效
httpMethod“GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS” and “PATCH”
codehttp的状态码 默认 200
extensions扩展属性

@ApiParam标记 
public ResponseEntity createUser(@RequestBody @ApiParam(value = “user”, required = true) User user)

属性名称备注
name属性名称
value属性值
defaultValue默认属性值
allowableValues可以不配置
required是否属性必填
access不过多描述
allowMultiple默认为false
hidden隐藏该属性
example举例子

@ApiImplicitParam对容器的描述

属性名称备注
name属性名称
value属性值
defaultValue默认值
allowableValues可以不可配置
required是否属性必填
access不可过多描述
allowMutiple默认为false
dataType数据类型
paramType参数类型

@ApiResponse

属性名称备注
codehttp的状态码
message描述
response默认响应类 Void
reference参考ApiOperation中配置
responseHeaders参考 ResponseHeader 属性配置说明
responseContainer参考ApiOperation中配置

@ResponseHeader(name=”head1”,description=”response head conf”)

属性名称备注
name响应头名称
description头描述
response默认响应类 Void
responseContainer参考ApiOperation中配置

4文档编写规范建议

  • entity的描述

@ApiModel(description = “我是描述”,value = “用户”) 
对实体的描述

description:在v2/api-docs的实体看到描述, 
value的值在@ApiImplicitParam注解中的dataType可用,

@ApiModelProperty(value = “用户姓名”,required = true,dataType = “String”) 
private String name; 
对字段的描述

value:1,入参和出参的ModelModel Schema选项卡可见,2,在v2/api-docs的实体字段描述可见 
required:该属性是否必填写 
dataType:该字段的数据类型

  • controller的描述

@Api(value = “API”, description = “用户接口详情”,tags=”A”) 
对controler的描述

value:访问某个controller的url的根路径值 
description:对于该controller的的大概描述 
tags:把api接口进行分分组

@ApiOperation(value = “获取用户详细信息”, notes = “根据url的id来获取用户详细信息”,httpMethod =”GET”) 
对该方法的描述

value:主页面中对该接口的描述,位置在接口的最右边 
notes:点开接口后,第一段描述。 
httpMethod:HTTP请求的动作名,可选值有:”GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS” and “PATCH”。

@ApiImplicitParam(name = “id”, value = “用户ID”, required = true, dataType = “String”, paramType = “path”) 
对参数的描述,如果多个参数需要用@ApiImplicitParams对其进行包裹

name:参数名称 
value:参数的简短描述 
required:是否必须传递的参数 
dataType:参数类型,可以为类名,也可以为基本类型(String,int,Boolean) 
paramType:参数的传入(请求)类型,可选的值有path, query, body, header or form。(如果在路径中提取参数用path比如:在/A/{XXX}路径中得到XXX的值)

@ApiParam(name = “user”, value = “userValue”, required = true) 
对参数元信息的说明,一般这个注解只能被使用在JAX-RS 1.x/2.x的综合环境下,和ApiImplicitParam注解类似

required:该参数是否必填 
value:该参数的简短介绍

@ApiResponse(code = 200, message = “Successful — 请求已完成”) 
返回状态码的描述,如果有多个可以使用@ApiResponses注解进行包裹

code:服务器返回的状态码 
message:服务器返回状态码的简短说明

sample:header中传递token

1 @ApiImplicitParams({@ApiImplicitParam(name = "TOKEN", value = "Authorization token", required = true, dataType = "string", paramType = "header")})

5,注意事项:

  • 路径参数比如一直传递 {id},需要在ApiImplicitParam注解中添加prameType=“path”
  • 版本问题,需要删除m2里面的jar包,2.2.2的swagger和1.5.6的spring-boot-prent才是绝配,试过很多最新的包,感觉多多少少都有点问题!
  • 入参数和出参数都能用到一个实体类,注意检查@ApiModel的value属性

6参考文档

可能还有其他没有列出的参考文档,见谅

https://gumutianqi1.gitbooks.io/specification-doc/content/tools-doc/spring-boot-swagger2-guide.html

http://www.jianshu.com/p/12f4394462d5

http://blog.didispace.com/springbootswagger2/

https://dzone.com/articles/spring-boot-restful-api-documentation-with-swagger

http://www.jianshu.com/p/b0b19368e4a8

 

文章转自:https://blog.csdn.net/xxoo00xx00/article/details/77163399

转载于:https://www.cnblogs.com/walblog/articles/9395125.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

13--长度最小的子数组

文章目录1.题目要求2.解题代码1.题目要求 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的连续子数组&#xff0c;并返回其长度。如果不存在符合条件的连续子数组&#xff0c;返回 0。 示例&#xff1a; 输入&#xff1a;…

HttpServletRequest 常用方法讲解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Web服务器收到一个http请求&#xff0c;会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象&#xff0c; 从客户端取…

object中的toString方法

任何一个类都是从Object类继承下来的&#xff0c;因此在任何一个类里面都可以重写这个toString()方法。toString()方法的作用是当一个引用对象和字符串作连接的时候&#xff0c;或者是直接打印这个引用对象的时侯&#xff0c;这个引用对象都会自动调用toString()方法&#xff0…

东网科技荣膺2016中国大数据最佳实践奖

11月24日&#xff0c;由中国软件网主办的数据趴活动圆满落幕&#xff0c;活动现场隆重揭晓了大数据领域的重磅榜单&#xff0c;旨在对大数据领域中表现突出的企业、人物进行表彰。东网科技有限公司(以下简称“东网科技”)凭借大数据运营支撑平台及在环保、烟草、教育、政府等行…

Apache Subversion 1.7.2发布,开源版本控制工具

SVN&#xff08;Subversion&#xff09;已经发布了1.7的第二个维护版本。 Apache Subversion是一个开放源码、多用户的版本控制系统&#xff0c;支持非 ASCII 文本和二进制数据&#xff0c;支持可在本地访问或通过网络访问的数据库和文件系统存储库。相对于传统的RCS、CVS&…

react生命周期

1、初始化getDefaultProps()设置默认的props&#xff0c;也可以用dufaultProps设置组件的默认属性。 getInitialState()在使用es6的class语法时是没有这个钩子函数的&#xff0c;可以直接在constructor中定义this.state。此时可以访问this.propscomponentWillMount()在组件初始…

14--用两个栈实现队列

文章目录1.题目详情2.解题代码1.题目详情 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 ) 示例…

浅谈爬虫 《一》 ===python

浅谈爬虫 《一》 python ‘’正文之前先啰嗦一下&#xff0c;准确来说&#xff0c;在下还只是一个刚入门IT世界的菜鸟&#xff0c;工作近两年了&#xff0c;之前做前端的时候就想写博客来着&#xff0c;现在都转做python了&#xff0c;如果还不开始写点什么&#xff0c;估计时间…

Servlet全面讲解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。Servlet&#xff08;Server Applet&#xff09;&#xff0c;全称Java Servlet。是用Java编写的服务器端程序。Servlet 是在服务器上运行的…

你的代码可以是优雅的,但是还有更重要的

引用软件设计有两种方法&#xff1a;一种是尽可能地简单&#xff0c;这种设计明显没有什么缺陷&#xff1b;另一种是尽可能地复杂&#xff0c;这种设计没有明显的缺陷。 ——C.A.R. Hoare&#xff0c;1980年图灵奖讲座在开发过程中&#xff0c;我的口头禅是&#xff1a; Your c…

15--0~n-1中缺失的数字

文章目录1. 问题描述2. 解题代码1. 问题描述 一个长度为n-1的递增排序数组中的所有数字都是唯一的&#xff0c;并且每个数字都在范围0&#xff5e;n-1之内。在范围0&#xff5e;n-1内的n个数字中有且只有一个数字不在该数组中&#xff0c;请找出这个数字。 示例 1: 输入: [0,…

如何在README中使用图片

将图片放在仓库里面&#xff0c;在文件里链接它&#xff0c;最后 push 到 github 上。 github 图片链接格式&#xff1a; (http://github.com/yourname/your-repository/raw/master/images-folder/xxx.png) 要自己设定的&#xff1a;yourname, your-repository, your-folder…

Unity中传入任意数,转换成分,秒,并进行倒计时换算..(两种方式)

第一种方式是利用Unity中的协程,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class DemoTest : MonoBehaviour {public Text text;//测试用的数字public int MyTime 60;void Start (){//开启协程…

内核编程小结(引用)

https://www.cnblogs.com/fanling999/p/4509785.html转载于:https://www.cnblogs.com/endenvor/p/9006507.html

JIRA 5.0.1 发布

Atlassian公司发布了JIRA 5.0.1版本&#xff0c;该版本相比JIRA 5.0有更多改进功能。1. 管理界面的改进 将更多页面管理转为对话框形式。例如点击页面右上方的“Add New”就可实现新增issue types、sub-tasks、field configurations 、screens。2. 性能改进 解决了基于Lucene 3…

java开启新线程的三种方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方式1&#xff1a;继承Thread类 步骤: 1):定义一个类A继承于Java.lang.Thread类. 2):在A类中覆盖Thread类中的run方法. 3):我们在ru…

16 --删除排序数组中的重复项

文章目录1.问题描述2.代码实现1.问题描述 给定一个排序数组&#xff0c;你需要在 原地 删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…

jquery评分效果Rating精华版

参考&#xff1a;https://blog.csdn.net/bluceyoung/article/details/8573629转载于:https://www.cnblogs.com/yingyigongzi/p/9400489.html

NVIDIA助力SiemensPLMSoftware“工业4.0创新实验室”,携手推进中国制造创新之路

今日&#xff0c;NVIDIA宣布为SiemensPLMSoftware在北京建成的“工业4.0创新实验室”提供了支持。该实验室配备SiemensPLMSoftware全面的产品生命周期管理解决方案&#xff0c;结合第三方硬件&#xff0c;向中国制造企业展示“数字化企业”的全景图。实验室的工作站全部配备NVI…

java中的native方法

一. 什么是Native Method简单地讲&#xff0c;一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法&#xff1a;该方法的实现由非java语言实现&#xff0c;比如C。这个特征并非java所特有&#xff0c;很多其它的编程语言都有这一机制&a…