Swagger 文档工具 设计、构建、文档化和使用您的 RESTful API ...

打印 上一主题 下一主题

主题 908|帖子 908|积分 2724

Swagger

Swagger 是一个功能强大的开源框架,支持大量工具生态系统,帮助您设计、构建、文档化和使用您的 RESTful API。
使用 SpringBoot

您可以从 swagger-springboot 获取完整的项目演示。
springboot-blog 中文版
文件结构可能如下所示:
  1. .
  2. |____main
  3. | |____java
  4. | | |____com
  5. | | | |____ryo
  6. | | | | |____Application.java
  7. | | | | |____controller
  8. | | | | | |____HelloWorld.java
  9. | | | | |____Swagger2.java
  10. | |____resources
  11. | | |____application.properties
  12. | | |____log4j2.xml
  13. | | |____README.md
复制代码
maven 配置

1、 创建 SpringBoot 项目

  • 在 pom.xml 中导入 SpringBoot 依赖包
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3.     <modelVersion>4.0.0</modelVersion>
  4.     <groupId>com.ryo</groupId>
  5.     <artifactId>springboot</artifactId>
  6.     <version>1.0.0</version>
  7.     <properties>
  8.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  9.         <plugin.tomcat.version>2.2</plugin.tomcat.version>
  10.         <maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version>
  11.         <maven-compiler-plugin.version>3.3</maven-compiler-plugin.version>
  12.         
  13.         <spring-boot.version>1.3.5.RELEASE</spring-boot.version>
  14.         <log4j.version>2.6</log4j.version>
  15.     </properties>
  16.     <dependencies>
  17.         
  18.         <dependency>
  19.             <groupId>org.springframework.boot</groupId>
  20.             <artifactId>spring-boot-starter-web</artifactId>
  21.             <version>${spring-boot.version}</version>
  22.         </dependency>
  23.         <dependency>
  24.             <groupId>org.springframework.boot</groupId>
  25.             <artifactId>spring-boot-starter-test</artifactId>
  26.             <version>${spring-boot.version}</version>
  27.         </dependency>
  28.         
  29.         <dependency>
  30.             <groupId>org.apache.logging.log4j</groupId>
  31.             <artifactId>log4j-api</artifactId>
  32.             <version>${log4j.version}</version>
  33.         </dependency>
  34.         <dependency>
  35.             <groupId>org.apache.logging.log4j</groupId>
  36.             <artifactId>log4j-core</artifactId>
  37.             <version>${log4j.version}</version>
  38.         </dependency>
  39.     </dependencies>
  40.     <build>
  41.         <plugins>
  42.             <plugin>
  43.                 <groupId>org.springframework.boot</groupId>
  44.                 <artifactId>spring-boot-maven-plugin</artifactId>
  45.                 <version>${spring-boot.version}</version>
  46.             </plugin>
  47.             <plugin>
  48.                 <groupId>org.apache.maven.plugins</groupId>
  49.                 <artifactId>maven-surefire-plugin</artifactId>
  50.                 <version>${maven-surefire-plugin.version}</version>
  51.                 <configuration>
  52.                     <skipTests>true</skipTests>
  53.                     <testFailureIgnore>true</testFailureIgnore>
  54.                 </configuration>
  55.             </plugin>
  56.             <plugin>
  57.                 <groupId>org.apache.maven.plugins</groupId>
  58.                 <artifactId>maven-compiler-plugin</artifactId>
  59.                 <version>${maven-compiler-plugin.version}</version>
  60.                 <configuration>
  61.                     <source>1.8</source>
  62.                     <target>1.8</target>
  63.                 </configuration>
  64.             </plugin>
  65.         </plugins>
  66.     </build>
  67. </project>
复制代码
2、maven 导入 jar
  1. <dependency>
  2.     <groupId>io.springfox</groupId>
  3.     <artifactId>springfox-swagger2</artifactId>
  4.     <version>2.2.2</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>io.springfox</groupId>
  8.     <artifactId>springfox-swagger-ui</artifactId>
  9.     <version>2.2.2</version>
  10. </dependency>
复制代码
配置信息

我们可以定义一个 swagger 的全局配置。
  1. package com.github.houbb.register.http.admin.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. import springfox.documentation.builders.ApiInfoBuilder;
  6. import springfox.documentation.builders.PathSelectors;
  7. import springfox.documentation.builders.RequestHandlerSelectors;
  8. import springfox.documentation.service.Contact;
  9. import springfox.documentation.spi.DocumentationType;
  10. import springfox.documentation.spring.web.plugins.Docket;
  11. import springfox.documentation.swagger2.annotations.EnableSwagger2;
  12. /**
  13. * swagger 配置
  14. *
  15. * @author binbin.hou
  16. * @since 1.0.0
  17. */
  18. @EnableSwagger2
  19. @Configuration
  20. public class SwaggerConfig {
  21.     @Bean
  22.     public Docket createRestApi() {
  23.         return new Docket(DocumentationType.SWAGGER_2)
  24.                 .pathMapping("/")
  25.                 .select()
  26.                 .apis(RequestHandlerSelectors.basePackage("com.github.houbb.register.http.admin.controller"))
  27.                 .paths(PathSelectors.any())
  28.                 .build()
  29.                 .apiInfo(new ApiInfoBuilder()
  30.                         .title("SpringBoot整合Swagger测试")
  31.                         .description("SpringBoot整合Swagger,详细信息......")
  32.                         .version("9.0")
  33.                         .contact(new Contact("老马", "blog.csdn.net", "aaa@gmail.com"))
  34.                         .license("The Apache License")
  35.                         .licenseUrl("http://www.baidu.com")
  36.                         .build());
  37.     }
  38. }
复制代码
最焦点的主要是 RequestHandlerSelectors.basePackage("com.github.houbb.register.http.admin.controller")
我们指定了需要扫描的包路径。
文档定义

3、配置使用

  • Application.java
  1. package com.ryo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. /**
  5. * Created by houbinbin on 16/6/5.
  6. */
  7. @SpringBootApplication
  8. public class Application {
  9.     public static void main(String args[]) {
  10.         SpringApplication.run(Application.class, args);
  11.     }
  12. }
复制代码

  • HelloWorld.java
  1. package com.ryo.controller;
  2. import io.swagger.annotations.Api;
  3. import io.swagger.annotations.ApiOperation;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. import org.springframework.web.bind.annotation.RestController;
  7. /**
  8. * Created by houbinbin on 16/6/19.
  9. */
  10. @RestController
  11. @RequestMapping("hello")
  12. @Api(value = "hello", description = "spring boot 初步测试")
  13. public class HelloWorld {
  14.     @ApiOperation(value="hello", notes="初步使用啦啦啦")
  15.     @RequestMapping(method = RequestMethod.GET)
  16.     public String hello() {
  17.         return "SUCCESS";
  18.     }
  19. }
复制代码

  • application.properties
  1. server.port=180080
复制代码
应用启动 & 访问

4、 启动应用
Maven Projects->${project}->lugins->spring-boot->spring-boot:run
  1. .   ____          _            __ _ _
  2. /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
  3. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  4. \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  5.   '  |____| .__|_| |_|_| |_\__, | / / / /
  6. =========|_|==============|___/=/_/_/_/
  7. :: Spring Boot ::        (v1.3.5.RELEASE)
  8. 2016-12-25 15:29:50.066  INFO 4095 --- [           main] com.ryo.Application                      : Starting Application on houbinbindeMacBook-Pro.local with PID 4095 (/Users/houbinbin/IT/code/springboot/target/classes started by houbinbin in /Users/houbinbin/IT/code/springboot)
  9. 2016-12-25 15:29:50.069  INFO 4095 --- [           main] com.ryo.Application                      : No active profile set, falling back to default profiles: default
  10. ...
  11. 2016-12-25 15:29:52.688  INFO 4095 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 18080 (http)
  12. 2016-12-25 15:29:52.692  INFO 4095 --- [           main] com.ryo.Application                      : Started Application in 3.094 seconds (JVM running for 5.262)
复制代码

  • 欣赏器访问
欣赏器访问:http://localhost:8080/swagger-ui.html
基本配置例子

Controller 控制器
  1. package com.github.houbb.register.http.admin.controller;
  2. import com.github.houbb.register.http.admin.model.ClientLogDto;
  3. import io.swagger.annotations.Api;
  4. import io.swagger.annotations.ApiOperation;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9. /**
  10. * <p>
  11. * 客户端数据日志 前端控制器
  12. * </p>
  13. *
  14. * @author binbin.hou
  15. * @since 2021-03-08
  16. */
  17. @Controller
  18. @RequestMapping("/clientLog")
  19. @Api(tags = "客户端日志 CRUD")
  20. public class ClientLogController {
  21.     @PostMapping("/add")
  22.     @ApiOperation("添加日志")
  23.     @ResponseBody
  24.     public String add(ClientLogDto clientLogDto) {
  25.         System.out.println(clientLogDto);
  26.         return "ok";
  27.     }
  28. }
复制代码
实体属性

针对入参 ClientLogDto,我们可以添加对应的属性形貌如下:
  1. public class ClientLogDto implements Serializable {
  2.     @ApiModelProperty(value = "类型")
  3.     private String type;
  4.     @ApiModelProperty(value = "地址")
  5.     private String ip;
  6.     @ApiModelProperty(value = "名称")
  7.     private String name;
  8.     //getter & setter & toString()
  9. }
复制代码
效果

重新启动应用,效果如下:

测试

我们可以使用 【Try it out】,可以进行相关的测试。

点击 execute 按钮,可以获取非常详细的文档返回。
常用注解阐明


  • @Api注解可以用来标志当前Controller的功能。
  • @ApiOperation注解用来标志一个方法的作用。
  • @ApiImplicitParam注解用来形貌一个参数,可以配置参数的中文寄义,也可以给参数设置默认值,如许在接口测试的时候可以避免手动输入。
  • 假如有多个参数,则需要使用多个@ApiImplicitParam注解来形貌,多个@ApiImplicitParam注解需要放在一个@ApiImplicitParams注解中。
  • 需要注意的是,@ApiImplicitParam注解中虽然可以指定参数是必填的,但是却不能取代@RequestParam(required = true),前者的必填只是在Swagger2框架内必填,抛弃了Swagger2,这个限制就没用了,所以假如开发者需要指定一个参数必填,@RequestParam(required = true)注解还是不能省略。
  • 假如参数是一个对象(比方上文的更新接口),对于参数的形貌也可以放在实体类中。
一点思考

swagger2 的 ui 还是非常惬意的,功能也比较强大,不外有一点比较惋惜,那就是注解显得有一点点冗余。
可以思量共同 yAPI 使用。
参考资料

SpringBoot的整合(四、整合Swagger2)
SpringBoot swagger 配置账号密码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表