• RestFul Api文档在线自动生成工具=>Api文档与API定义同步更新
  • 直接运行,可以在线测试API接口;

在项目中使用swagger,需要使用springfox:

  • swagger2
  • ui

SpringBoot集成Swagger2

  • 新建一个springboot-web项目
  • 导入依赖坐标(建议不用最新版本) ```xml io.springfox springfox-swagger2 2.9.2
io.springfox springfox-swagger-ui 2.9.2
  1. **注意:**导入最新版本`3.0.0`时,在配置swagger且正常运行项目后,无法打开swagger-ui的页面(原因还未查明)
  2. - 编写一个hello工程
  3. - 配置Swagger====>config
  4. ```java
  5. @Configuration
  6. @EnableSwagger2
  7. public class SwaggerConfig {
  8. }

Swagger的bean实例Docket【可以参考swagger源码进行配置】

  1. @Configuration
  2. @EnableSwagger2 //开启swagger2
  3. public class SwaggerConfig {
  4. //配置swagger的Docket的bean实例
  5. @Bean
  6. public Docket docket() {
  7. return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
  8. }
  9. //配置swagger的信息=apiinfo
  10. public ApiInfo apiInfo() {
  11. Contact DEFAULT_CONTACT = new Contact("heqiaosheng", "", "1357976441@qq.com");
  12. return new ApiInfo(
  13. "何巧生的swagger API文档",
  14. "今天你博学了吗",
  15. "v1.0",
  16. "urn:tos",
  17. DEFAULT_CONTACT,
  18. "Apache 2.0",
  19. "http://www.apache.org/licenses/LICENSE-2.0",
  20. new ArrayList<VendorExtension>());
  21. }
  22. }

Swagger配置扫描接口

Docket.select ( )
image.png
使用select()后就必须使用.build,使用.build后就只剩下两个方法.apis().paths()可以使用
.build表示工厂模式

配置是否启动Swagger

image.png
出题:我只希望我的Swagger在生产环境中使用,在发布的时候不使用?
●判断是不是生产环境【flag = false】
●注入enable (flag)
image.png
image.png

配置API文档的分组

image.png
image.png如何配置多个分组?配置多个Docket实例即可
image.png
image.png

Swagger注释

实体类

image.png
image.png

Controller类

image.png

其他注释

@JsonProperty
在序列化和反序列化时使用。用于属性上,作用是把该属性的名称序列化成另一个自己想要的名称,如把trueName属性序列化为name,

  1. @JsonProperty("name")
  2. private String trueName; // 假如 trueName 最后为"小明"
  3. // 转化为 json 后: {"name":"小明"}

注意事项:
类和父类必须都实现序列化后,才可以反序列化,类没有实现序列化,也可以使用此注解序列化
感觉这个注解的作用是:

  • 前端传参数过来的时候,使用这个注解,可以获取到前端与注解中同名的属性
  • 后端处理好结果后,返回给前端的属性名也不以实体类属性名为准,而以注解中的属性名为准

Swagger入门案例

SwaggerConfig配置类

  1. @Configuration
  2. @EnableSwagger2 //开启swagger2
  3. public class SwaggerConfig {
  4. //设置分个组名
  5. @Bean
  6. public Docket docket1(){
  7. return new Docket(DocumentationType.SWAGGER_2)
  8. .groupName("A");
  9. }
  10. @Bean
  11. public Docket docket2(){
  12. return new Docket(DocumentationType.SWAGGER_2)
  13. .groupName("B");
  14. }
  15. @Bean
  16. public Docket docket3(){
  17. return new Docket(DocumentationType.SWAGGER_2)
  18. .groupName("C");
  19. }
  20. //配置swagger的Docket的bean实例
  21. @Bean
  22. public Docket docket(Environment environment) {
  23. Profiles profiles=Profiles.of("dev","test");
  24. boolean flag = environment.acceptsProfiles(profiles);
  25. return new Docket(DocumentationType.SWAGGER_2)
  26. .apiInfo(apiInfo())
  27. .groupName("emma")
  28. .enable(true)
  29. .select()
  30. .apis(RequestHandlerSelectors.basePackage("com.emma.swagger2_study.contoller"))
  31. // .paths(PathSelectors.ant("/emma/**"))
  32. .build();
  33. }
  34. //配置swagger的信息=apiinfo
  35. public ApiInfo apiInfo() {
  36. Contact DEFAULT_CONTACT = new Contact("heqiaosheng", "", "1357976441@qq.com");
  37. return new ApiInfo(
  38. "何巧生的swagger API文档",
  39. "今天你博学了吗",
  40. "v1.0",
  41. "urn:tos",
  42. DEFAULT_CONTACT,
  43. "Apache 2.0",
  44. "http://www.apache.org/licenses/LICENSE-2.0",
  45. new ArrayList<VendorExtension>());
  46. }
  47. }

Controller类

  1. @RestController
  2. public class HelloController {
  3. @GetMapping("/hello")
  4. public String hello() {
  5. return "hello swagger2";
  6. }
  7. @ApiOperation("hello2方法")
  8. @GetMapping("/hello2")
  9. public User hello2() {
  10. return new User();
  11. }
  12. @ApiOperation("获取用户控制类")
  13. @PostMapping("/getUser")
  14. public User getUser(@ApiParam("用户") User user) {
  15. return user;
  16. }
  17. }

实体类

  1. @Data
  2. @ApiModel("用户实体类")
  3. public class User {
  4. @ApiModelProperty("用户名")
  5. private String username;
  6. @ApiModelProperty("密码")
  7. private String password;
  8. }

总结

总结

  • 我们可以通过Swagger给一些比较难理解的属性或者接口, 增加注释信息
  • 接口文档实时更新
  • 可以在线测试

Swagger是一个优秀的工具, 几乎所有大公司都有使用它
【注意点】在正式发布的时候,关闭Swagger!!!出于安全考虑,而且节省运行的内存

工作中学到的Swagger

新的一种swagger接口界面

  1. <!-- 这里使用 swagger-bootstrap-ui 替代了原有丑陋的ui,拯救处女座~ -->
  2. <dependency>
  3. <groupId>com.github.xiaoymin</groupId>
  4. <artifactId>swagger-bootstrap-ui</artifactId>
  5. <version>1.9.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>io.springfox</groupId>
  9. <artifactId>springfox-swagger2</artifactId>
  10. <version>2.9.2</version>
  11. </dependency>

访问路径:http://localhost:8800/has-pss-cw-local/doc.html#/
image.png
image.png