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;…

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

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

14--用两个栈实现队列

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

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

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

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…

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

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

17--合并两个有序数组

文章目录1.问题描述2.代码实现1.问题描述 给你两个有序整数数组 nums1 和 nums2&#xff0c;请你将 nums2 合并到 nums1 中&#xff0c;使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间&#xff08;空间…

Maven 添加本地 jar 包、添加依赖 jar 文件到本地 Maven 仓库、引用本地 jar

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 把要用的jar放在固定位置&#xff1a; 2.打开CMD&#xff0c;进入到libs文件夹: 3.运行如下命令&#xff1a; mvn install:install-…

黄文俊:Serverless小程序后端技术分享

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 黄文俊&#xff0c;现任腾讯云SCF无服务器云函数高级产品经理&#xff0c;多年企业级系统开发和架构工作经验&#xff0c;对企业级存储、容器平台、微服务架构、无服务器计算等领域均有涉猎。今天讲的是怎么…

18--两数之和 II - 输入有序数组

文章目录1.问题描述2.解题代码1.问题描述 给定一个已按照升序排列 的有序数组&#xff0c;找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2&#xff0c;其中 index1 必须小于 index2。 说明: 返回的下标值&#xff08;index1 和 index2&a…

Oracle数据库(二)—— 基本的SQL SELECT语句

&#xff08;一&#xff09;SQL语句分为一下三种类型 DML:Date Manipulation Language 数据操纵语言DDL&#xff1a;Data Definition Language 数据定义语言DCL&#xff1a;Data Control Language 数据控制语言DML&#xff1a;用于查询与修改数据记录 包括如下SQL语句&#xff…

简单 3 步实现高效编程

本文的内容可能部分开发者已经了解&#xff0c;并且已经按照这些方法实施了。但本文还是想强调这些方法&#xff0c;因为这些简单的方法可以让你的工作更加高效。要想实现高效编程&#xff0c;最主要的是集中注意力&#xff0c;但这往往也是比较难以实现的&#xff0c;因为你在…

19--两数之和

文章目录1.题目要求2.代码详情1.题目要求 2.代码详情 java:暴力求解法hashmap法 class Solution {// 方法一&#xff1a;暴力求解法// public int[] twoSum(int[] nums, int target) {// int n nums.length;// for (int i0; i<n; i){// for (int ji1; j…

redis的配置文件

redis的配置文件 之前在实习的时候才开始接触redis&#xff0c;随着对redis的理解加深&#xff0c;才慢慢明白它的强大&#xff0c;也逐渐对他的配置有了一定的了解。下面就分享给大家&#xff0c;以便日后查看。 位置 redis的配置文件名为redis.conf在它的安装目录下。 参数说…

你的代码(软件)安全吗?【信息图】

2011年安全事件层出不穷&#xff0c;几乎可以称为“黑客年”。以前黑客通常是利用程序漏洞来造成破坏&#xff0c;令网站陷入尴尬的境地&#xff0c;但如今他们却是为了窃取数据、IP地址&#xff0c;或者通过在网站中植入木马将恶意软件安装到访客的电脑里&#xff0c;更有甚者…

20--两个数组的交集

文章目录1.问题描述2.代码详情1.问题描述 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 示例 2&#xff1a; 输入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 输…

跳出IT运维怪圈 看南方报业如何主动出击

虽说世界上没有一劳永逸的事情&#xff0c;不过借助某些方案&#xff0c;IT运维倒可做到事半功倍。近日&#xff0c;南方报业传媒集团采用新华三智动远程运维服务解决方案&#xff0c;利用7*24级别安仔的桌面服务&#xff0c;实现IT运维智能化、自动化管理&#xff0c;有效保障…

网络传输与加密

谈到网络&#xff0c;就必然会涉及网络安全。但“安全”这个事情&#xff0c; 一下子就会让人联想到黑客&#xff0c;进而把“安全”这个事情无限放大为各种高大上、神秘莫测、不可知。这不是一个engineer应有的态度&#xff08;《一次艰难debug的反思》&#xff09;。 要讨论网…

21--最小栈

文章目录1.问题描述2. 代码详情1.问题描述 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的…