导语
  在之前的博客中曾经说过关于SpringBoot RESTful架构的知识,也提供了一个简单的小例子,当然在实际工作中更多的使用的是Swagger来实现一个RESTful的API。那么下面就来看看如何利用Swagger来构建一个RESTful APIs

文章目录

  • 什么是Swagger
  • 快速开发
    • 导入依赖POM文件
    • 创建SwaggerConfig的配置类
  • Swagger 常用注解
    • @Api
    • @ApiOperation
    • @ApiImplicitParams和@ApiImplicitParam的用法
    • @ApiResponses 和@ApiResponse的使用
    • @ApiModel 和 @ApiModelProperty的使用
  • Try it out
  • 总结

什么是Swagger

  Swagger是一个RESTfulAPI的工具,通过Swagger可以获取到项目的各种交互文档,以及客户端SKD的自动生效等功能。
  Swagger的可以实现RESTful风格API的标准定义,与所用的开发语言无关,使用者和计算机是看不到源码或者是开发文档,或者说不能通过网络流量检测的情况下,可以发现和理解各种服务。当服务通过Swagger定义,消费者就能通过远程的服务调用来实现少部分的逻辑。类似于低级编程接口,Swagger去掉了服务调用的时候的猜测。实现了直接调用。是一个功能强大的API表达工具。
  使用SpringBoot 来集成 Swagger,是要通过注解标记出需要在API中展示的信息,Swagger会根据项目中标记的注解来生成对应的API文档。Swagger是世界上最流行的API工具,提供了API的管理解决方案,API所需要的所有的要素在其中有所包含,也可以实现定制。

快速开发

导入依赖POM文件

  在开发之前首先需要解决的是SpringBoot如何集成Swagger2.x,需要在POM文件中导入如下的依赖。

<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.8.0</version>
</dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.8.0</version>
</dependency>

创建SwaggerConfig的配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {}

在配置类上加上两个注解

  • @Configuration 表示这个类为一个配置类在启动的时候作为配置文件来使用
  • @EnableSwagger2 表示这个项目启动了SwaggerAPI文档

在这个配置类中加入两个方法

@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api(){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.nh")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo(){return new ApiInfoBuilder().title("用户管理").description("用户管理中心API 1.0 操作文档").termsOfServiceUrl("http://www.nihui.com").version("1.0").contact(new Contact("倪辉开发","http://www.nihui.com","nihui@126.com")).build();}
}

  第一个方法使用了@Bean注解,就表示这个是要被注入到容器中的内容,返回的是一个Docket(Swagger API摘要),这里需要注意的是其中需要指定需要扫描的包路径,也就是说在指定路径下的Controller类才会被生成SwaggerAPI文档。
  第二个方法的配置相对比较重要点,主要包括了展示的主题、描述、版本、服务条款、服务联系方式等等。查看ApiInfo的源码会发现其实它还可以支持关键描述高亮处理。提供了如下的一些配置。

public class ApiInfo {private final String version;private final String title;private final String description;private final String termsOfServiceUrl;private final String license;private final String licenseUrl;private final Contact contact;private final List<VendorExtension> vendorExtensions;

上面代码中显示的所有的信息都可以通过上面配置类中的方法进行配置。当然也可以使用默认值,配置完成之后就是启动项目查看是否配置成功。运行项目主启动类,并在浏览器中输入http://localhost:8080/swagger-ui.html 就会看到如下的内容,就说明配置有效。

  当然会看到在页面下方会出现**No operations defined in spec!**的字样,也就是说没有找到相关的API内容,这是因为还没有在对应的包下面添加Controller的信息,下面就来整合一下其他的代码看看效果如何。

Swagger 常用注解

  在上面提到Swagger通过注解的方式来生成对应的文档,包括接口名、请求方法、请求参数、返回信息等等。其中常用的注解有以下一些。

作用范围 API 使用位置
协议集描述 @Api 用于Controller类上
协议描述 @ApiOperation 用于在Controller的方法上
非对象参数集 @ApiImplicitParams 用在Controller的方法上
非对象参数描述 @ApiImplicitParam 用在被@ApiImplicitParams标注的方法里
响应集 @ApiResponses 用在Controller方法上
响应信息参数 @ApiResponse 用在@ApiResponses里面
描述返回对象的意义 @ApiModel 用在返回对象类上
对象属性 @APIModelProperty 使用在传入参数的对象字段上

@Api

  首先来看一下@Api注解的作用

@Api(value = "用户",description = "用户操作API",position = 100,protocols = "http")
@RestController
public class UserController {

测试效果如下,自动将Controller中的所有方法都进行了映射。

@ApiOperation

  ApiOperation是被标注在方法上,用来描述方法名、方法解释、方法返回信息、标记信息等等操作。

例如

    @ApiOperation(value = "获取用户列表",notes = "获取所有用户信息",produces = "application/json,application/xml",consumes = "application/json,application/xml",response = List.class)@GetMapping("/allUser")public List<User> getAllUser(){return userService.getAllUser();}

效果如下

@ApiImplicitParams和@ApiImplicitParam的用法

  这两个注解用来描述方法的返回值信息,需要两个注解配合使用,@ApiImplicitParam注解重点描述的是每个参数的信息。例如

   @ApiOperation(value = "增加用户操作",notes = "用户创建用户接口")@ApiImplicitParams({@ApiImplicitParam(name = "id",value = "用户ID",required = true,dataType = "Integer",paramType = "query"),@ApiImplicitParam(name = "name",value = "用户名",required = true,dataType = "String",paramType = "query"),@ApiImplicitParam(name = "password",value = "密码",required = true,dataType = "String",paramType = "query")})@PostMapping("/addUser")public int addUser(@RequestBody User user){return userService.addUser(user);}

@ApiResponses 和@ApiResponse的使用

  两者表示对于方法返回值的封装,@ApiResponse表示具体返回码以及返回信息的封装。

    @ApiOperation(value = "获取用户信息",notes = "获取单个用户的信息")@ApiResponses({@ApiResponse(code=100,message = "请求参数有错"),@ApiResponse(code=101,message = "未授权"),@ApiResponse(code=103,message = "禁止访问"),@ApiResponse(code=104,message = "请求路径不存在"),@ApiResponse(code=105,message = "服务器内部错误"),})@GetMapping("/getOneUser")public User getUserById(@RequestParam Integer id){return userService.getUserById(id);}

@ApiModel 和 @ApiModelProperty的使用

  在实际项目中,通常会封装一个返回值对象,@ApiModel就是负责描述这个对象信息的。而@ApiModelProperty 是负责描述对象属性中的相关信息。这里我们拿实际生产上的一个例子做为说明

@JsonIgnoreProperties(ignoreUnknown = true)
@Getter
@Setter
@ApiModel(description="响应对象")
public class ResultResp<T> extends AbsJsonResp {private static final long serialVersionUID = 8262436911538688064L;@JsonProperty("date")@ApiModelProperty(value="时间",name = "time")private Date date=new Date();/*** normal* error* exception*/@ApiModelProperty(value="响应状态",name = "状态")@JsonProperty("status")private String status="normal";@JsonProperty("exception")private ExceptionMsg exceptionMsg;@ApiModelProperty(value="响应数据",name = "data")@JsonProperty("response")private T response;@JsonIgnorepublic void setException(ParentException parentException){this.exceptionMsg=parentException.getExceptionMsg();}}

当然上面介绍的就是一些在实际开发中经常会用的注解,对于注解里面的具体有那些属性,可以自己研究。如果能够灵活的使用这些注解就可以构建出一个脉络清晰的API文档。

Try it out

  在上面截图中我们会看到一个Try it out 的按钮。Swagger在创建这个API的时候还提供了一个非常强大的功能,这个功能就是可以在接口页面上直接测试接口操作,这样如果是前端在调用后端系统出现问题的时候可以通过这页面进行测试。

在点击完执行按钮之后会出现上面的效果。通过上面的结果截图可以看出实际上是调用了

curl -X GET “http://localhost:8081/allUser” -H “accept: /

方式进行了测试调整后端的参数就可以看到这条命令的变化。

总结

  通过上次博客例子,演示了Swagger的使用,说明了Swagger是在实际开发中非常好用的一个组件。可以通过Swagger构建出非常丰富的API文档,也可以通过这个组件进行接口的测试。当然Swagger还有很多的功能等待大家的使用!

SpringBoot 精通系列-使用Swagger2构建RESTful APIs相关推荐

  1. Spring Boot中使用Swagger2构建RESTful APIs

    关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. S ...

  2. dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3(十)之Spring MVC中使用 Swagger2 构建Restful API...

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/55047193 1.Swagger2是什么? ...

  3. Spring MVC中使用 Swagger2 构建Restful API

    0.Spring MVC配置文件中的配置 [java] view plain copy <!-- 设置使用注解的类所在的jar包,只加载controller类 --> <span s ...

  4. springboot集成swagger2构建RESTful API文档

    在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...

  5. Spring Boot中使用Swagger3.0.0版本构建RESTful APIs

    文章目录 一.项目描述 二.简介 三.Swagger2.X和Swagger3.0.0 的对比 1)SpringFox 2.x 发布 2)SpringFox 3.0.0 发布 3)swagger3.0 ...

  6. 使用 Swagger 2 构建 RESTful APIs

    1    第2-9课:使用 Swagger 2 构建 RESTful APIs 1.1     什么是 Swagger Swagger 是一系列 RESTful API 的工具,通过 Swagger ...

  7. SpringBoot——JPA的使用、构建restful风格的JPA

    1.JPA概述 JPA:Java持久化规范.JPA(Java Persistence API)是Sun官方提出的Java持久化规范.为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的 ...

  8. SpringBoot 精通系列-构建一个RESTful Web 服务

    导语   现在越来越多的企业推荐使用的是RESTful风格来构建企业应用接口,那么什么是RESTful呢? 文章目录 什么是RESTful SpringBoot对于RESTful有哪些支持 快速实例 ...

  9. SpringBoot 精通系列-SpringBoot整合Redis的常用操作

    导语   在之前的博客中介绍过关于Memcache的使用,这篇文章中主要介绍关于Redis的有关概念及如何与SpringBoot整合使用.   首先Redis是目前使用最为广泛的缓存中间件,相比较Me ...

最新文章

  1. 虚拟主播上线:多模态将改变人机交互的未来
  2. 关于Oracle RAC节点间免密码策略
  3. php mysql explain_MySQL Explain详解
  4. 零序电流计算软件_每天5分钟跟我一起学电气之电力系统中的零序
  5. 【AC】九度OJ题目1153:括号匹配问题
  6. MIPS 已死,转身投靠 RISC-V!
  7. [Java] 蓝桥杯ADV-155 算法提高 上帝造题五分钟
  8. msi笔记本u盘装linux,微星笔记本bios设置u盘启动的步骤方法详细教程 - 系统家园...
  9. 可能是迄今为止最好的GitHub代码浏览插件--赞
  10. python 除法总返回浮点
  11. 电脑记事本在哪个文件夹
  12. 汽车自动驾驶技术与产品研发仿真测试软件—panosim(一)
  13. echarts雷达图显示数值
  14. Http协议是无状态的 作者:cp_insist
  15. MBTI职业倾向测验
  16. Postgis使用工具osm2pgsql导入OpenStreetMap数据
  17. Cisco NAT --- ip nat enable NVI方式
  18. 吉大17秋计算机应用二,吉大17秋《计算机应用基础》在线作业二.doc
  19. node生成唯一设备id(node-machine-id)
  20. Mysql-如何建表更符合业务

热门文章

  1. alook浏览器_alook浏览器下载-Alook浏览器iOS版下载 苹果版v10.8-PC6苹果网
  2. python selenium 点击开始按钮,python selenium-点击页面而不使用next按钮
  3. SpringMVC错误:No mapping found for HTTP request with URI [xxxx] in DispatcherServlet
  4. 从零开始学架构三 高性能
  5. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据...
  6. 你所坚信的,就是你的生活
  7. windows 安装leopard方法
  8. oracle developer 连接 mysql
  9. Hadoop1.9安装配置
  10. 浪潮服务器 NF 8460M4 的PM8060 RAID卡设置添加热备方法