热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot系列十九Springboot集成swagger

Swagger简述Swagger是一款RESTFUL接口的文档在线自动生成功能测试功能软件Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTf

Swagger简述

Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步

Spring Boot集成Swagger

本文涉及的工程: swagger

pom.xml swagger需要引入如下的jar


io.springfoxspringfox-swagger22.2.2

io.springfoxspringfox-swagger-ui2.2.2

@EnableSwagger2 使用@EnableSwagger2注解在Control类上就可以swagger的功能

@RestController
@EnableSwagger2 // 启动swagger注解
// api-value:定义名称,如果没有定义,则默认显示类名
@Api(value = "Swagger Test Control", description = "演示Swagger用法的Control类", tags = "Swagger Test Control Tag")
public class SwaggerTestCtl {
..
}

执行启动类 执行启动类,访问如下连接 http://127.0.0.1:8080/swagger-ui.html#/ 就可以进入swagger页面,进行接口测试,界面如下:

ApiInfo类

我们创建ApiInfo实例,我们为swagger配置更多的接口说明

@Bean
public Docket api() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(getApiInfo())// .pathMapping("/")// base,最终调用接口后会和paths拼接在一起.select()// .paths(Predicates.or(PathSelectors.regex("/api/.*")))//过滤的接口.apis(RequestHandlerSelectors.basePackage("com.hry.swagger.ctl")) //过滤的接口.paths(PathSelectors.any()).build();
}private ApiInfo getApiInfo() {// 定义联系人信息Contact contact = new Contact("hryou0922","https://github.com/hryou0922", "hryou0922@126.com");return new ApiInfoBuilder().title("演示 Swagger 的用法") // 标题.description("演示Swagger中各种注解的用法") // 描述信息.version("1.1.2") // //版本.license("Apache 2.0").licenseUrl("http://www.apache.org/licenses/LICENSE-2.0").contact(contact).build();
}

重启服务,界面如下:

swagger的注解

swagger的注解概述

我们可以使用swagger定义更详细接口说明

@Api:用在类上,标志此类是Swagger资源value:接口说明tags:接口说明,可以在页面中显示。可以配置多个,当配置多个的时候,在页面中会显示多个接口的信息@ApiOperation:用在方法上,描述方法的作用@ApiImplicitParams:包装器:包含多个ApiImplicitParam对象列表@ApiImplicitParam:定义在@ApiImplicitParams注解中,定义单个参数详细信息○ paramType:参数放在哪个地方§ header-->请求参数的获取:@RequestHeader§ query-->请求参数的获取:@RequestParam§ path(用于restful接口)-->请求参数的获取:@PathVariable§ body(以流的形式提交 仅支持POST)§ form(以form表单的形式提交 仅支持POST)○ name:参数名○ dataType:参数的数据类型 只作为标志说明,并没有实际验证§ Long§ String○ required:参数是否必须传§ true§ false○ value:参数的意义○ defaultValue:参数的默认值@ApiModel:描述一个Swagger Model的额外信息@ApiModel用在类上,表示对类进行说明,用于实体类中的参数接收说明@ApiModelProperty:在model类的属性添加属性说明@ApiParam:用于Controller中方法的参数说明@ApiResponses:包装器:包含多个ApiResponse对象列表@ApiResponse:定义在@ApiResponses注解中,一般用于描述一个错误的响应信息○ code:错误码,例如400○ message:信息,例如"请求参数没填好"○ response:抛出异常的类@Authorization Declares an authorization scheme to be used on a resource or an operation.@AuthorizationScope Describes an OAuth2 authorization scope.

##演示使用注解demo 本节我们演示上节的注解如何使用 ###@Api 用在类上,标志此类是Swagger资源,对接口更加详细说明

@RestController
@EnableSwagger2 // 启动swagger注解
@Api(value = "Swagger Test Control", description = "演示Swagger用法的Control类", tags = "Swagger Test Control Tag")
public class SwaggerTestCtl {}

结果如下:

###@ApiOperation 用在方法上,描述方法的作用

// 方法的说明
@ApiOperation(value = "根据id获取记录", response = Student.class)
// 定义请求参数
@ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "主键", required = true) })
public Student queryById(String id){System.out.println("queryById id = " + id);return new Student();
}

结果如下:

@ApiImplicitParams 和 @ApiImplicitParam

// 定义请求参数
@ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "主键", required = true) })
public Student queryById(String id){System.out.println("queryById id = " + id);return new Student();
}

结果如下:

###@ApiModel 和@ApiModelProperty

定义model类

@ApiModel( description = "学生")
public class Student {@ApiModelProperty(value = "主键id")private String id;@ApiModelProperty(value = "名称", required = true)private String name;@ApiModelProperty(value = "年龄", required = true)private int age;

}

在方法使用

@RequestMapping(value = "/update", method = {RequestMethod.POST})
// 方法说明
@ApiOperation(value = "添加学生记录", notes="传递复杂对象DTO",produces = "application/json")
public int update(@RequestBody Student student){System.out.println("update student = " + student);return 1;
}

结果如下:

@ApiResponses和@ApiResponse

@RequestMapping(value = "/del", method = {RequestMethod.POST, RequestMethod.GET})
// 方法说明
@ApiOperation(value = "删除学生记录学生记录")
// 定义返回值意义
@ApiResponses({@ApiResponse(code = 400, message = "服务器内部异常"),@ApiResponse(code = 500, message = "权限不足") })
public int del(int id){System.out.println("del id = " + id);return 1;
}

结果如下:

其它

在测试过程中,可能出现界面内容没有被刷新,则可以使用 shift + F5 强制刷新

代码

以上的详细的代码见下面 github代码,请尽量使用tag v0.22,不要使用master,因为我不能保证master代码一直不变



推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  •   CSS网页布局中不推荐使用的HTML标签,请尽量不要使用这些HTML标签。  Donotusethesehtmlelementsinhtmlpages.  Presentationalelementsshouldnotbeused ... [详细]
  • Tag类:EVAL_BODY_INCLUDE在doStartTag中返回表示执行标签体的内容SKIP_BODY在doStartTag方法中返回表示不执行标签体EVAL ... [详细]
  • IssuesonGithubaremeantforbugreporting.Pleasepostfeaturerequestsonthe ... [详细]
author-avatar
小志19841126_466
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有