SpringBoot集成swagger2

ゝ一世哀愁。 2021-10-31 15:50 685阅读 0赞

一: 简介

什么是swagger ?

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。目前来说swagger一共有两个版本,且区别还挺大,第一个版本就是swagger-ui也就是swagger1;第二个版本是springfox-swagger也就是swagger2;

本篇只说Swagger2在线文档框架,因为相对swagger1来说,本人觉得使用swagger2开发效率更好,且使用更方便,它是通过注解的方式生成在线文档,不同于swagger1 还需写index.xml和ymal配置文件。

为什么要用swagger ?

因为自前后端分离后,写接口文档可以说是必不可少得工作。我们在理想状态下,只需设计好接口文档,然后通过前/后端小伙伴按规则开发,开发好之后对接上线就OK了,当然,这样的流程仅限于理想状态,而在实际开发过程中,我们只能不断的 改丶改丶 改 [ 就问你炸不炸 ] ,所以我们如何“优雅”的写接口文档呢?使用swagger就是其中一种方式,这里只介绍swagger2。

下面开始 SpringBoot + Maven + Swagger2 的使用

二:集成,测试

一:添加依赖

  1. <!--引入swagger2依赖-->
  2. <dependency>
  3. <groupId>io.springfox</groupId>
  4. <artifactId>springfox-swagger2</artifactId>
  5. <version>2.6.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>io.springfox</groupId>
  9. <artifactId>springfox-swagger-ui</artifactId>
  10. <version>2.6.0</version>
  11. </dependency>

二:swagger2信息配置

创建一个Swagger2Config类 用于swagger的基本配置(自定义命名,想咋写咋写)

  1. import io.swagger.annotations.ApiOperation;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import springfox.documentation.builders.ApiInfoBuilder;
  5. import springfox.documentation.builders.RequestHandlerSelectors;
  6. import springfox.documentation.service.ApiInfo;
  7. import springfox.documentation.spi.DocumentationType;
  8. import springfox.documentation.spring.web.plugins.Docket;
  9. import springfox.documentation.swagger2.annotations.EnableSwagger2;
  10. /**
  11. * 对Swagger2的配置信息
  12. *
  13. */
  14. @Configuration
  15. @EnableSwagger2
  16. public class Swagger2Config {
  17. @Bean
  18. public Docket createRestApi() {
  19. return new Docket(DocumentationType.SWAGGER_2)
  20. .apiInfo(apiInfo())
  21. .select()
  22. .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
  23. .build();
  24. }
  25. private ApiInfo apiInfo() {
  26. return new ApiInfoBuilder()
  27. .title("测试 API")
  28. .description("测试 API")
  29. .termsOfServiceUrl("http://127.0.0.1:8081/")
  30. .contact("你妈喊你回家吃饭了")
  31. .version("1.0")
  32. .build();
  33. }
  34. }

这里涉及到了两个注解:

@Configuration 用于定义配置类,是JDK自带的注解,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContextAnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

@EnableSwagger2就是启动swagger2的相关功能。

访问:http://127.0.0.1:8081/swagger-ui.html (我这里端口是8081)

到这里我们的swagger就配置完成了,下面我们写一段测试代码。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg3NjU0OA_size_16_color_FFFFFF_t_70

三:写一个测试类

  1. import io.swagger.annotations.Api;
  2. import io.swagger.annotations.ApiOperation;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.ResponseBody;
  6. @Controller
  7. @Api(description = "测试TEST")
  8. public class Test {
  9. @RequestMapping("/index")
  10. public String Index(){
  11. return "index";
  12. }
  13. @ResponseBody
  14. @RequestMapping("test")
  15. @ApiOperation(value = "测试",notes = "获取",httpMethod = "GET")
  16. public String test(){
  17. return "Hello World";
  18. }
  19. }

访问:http://127.0.0.1:8081/swagger-ui.html

点击:Try it out! 进行测试。watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg3NjU0OA_size_16_color_FFFFFF_t_70 1

好了,一个简单的测试就完成了。

三:统一参数

我们在编写API文档的时候一般都需要统一验证请求的,就拿登陆来说,我们需要通过获取请求头header里的token来验证,对于这种情况,我们可以在controller的方法中都加上token的参数,这样虽然可以解决,但是真的很麻烦,所以我们可以通过在swagger配置类中统一处理token参数的方式来解决。

  1. import io.swagger.annotations.ApiOperation;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import springfox.documentation.builders.ApiInfoBuilder;
  5. import springfox.documentation.builders.PathSelectors;
  6. import springfox.documentation.builders.RequestHandlerSelectors;
  7. import springfox.documentation.service.ApiInfo;
  8. import springfox.documentation.service.ApiKey;
  9. import springfox.documentation.service.AuthorizationScope;
  10. import springfox.documentation.service.SecurityReference;
  11. import springfox.documentation.spi.DocumentationType;
  12. import springfox.documentation.spi.service.contexts.SecurityContext;
  13. import springfox.documentation.spring.web.plugins.Docket;
  14. import springfox.documentation.swagger2.annotations.EnableSwagger2;
  15. import java.util.List;
  16. import static com.google.common.collect.Lists.newArrayList;
  17. /**
  18. * 对Swagger2的配置信息
  19. *
  20. * @author wendell
  21. */
  22. @Configuration
  23. @EnableSwagger2
  24. public class Swagger2Config {
  25. @Bean
  26. public Docket createRestApi() {
  27. return new Docket(DocumentationType.SWAGGER_2)
  28. .apiInfo(apiInfo())
  29. .select()
  30. .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
  31. .build()
  32. .securitySchemes(securitySchemes())
  33. .securityContexts(securityContexts())
  34. ;
  35. }
  36. private ApiInfo apiInfo() {
  37. return new ApiInfoBuilder()
  38. .title("测试 API")
  39. .description("测试 API")
  40. .termsOfServiceUrl("http://127.0.0.1:8081/")
  41. .contact("你爸喊你回家吃饭了,快出来")
  42. .version("1.0")
  43. .build();
  44. }
  45. /**
  46. * 全局统一配置token
  47. * @return
  48. */
  49. private List<ApiKey> securitySchemes() {
  50. return newArrayList(
  51. new ApiKey("Authorization", "Authorization", "header"));
  52. }
  53. private List<SecurityContext> securityContexts() {
  54. return newArrayList(
  55. SecurityContext.builder()
  56. .securityReferences(defaultAuth())
  57. .forPaths(PathSelectors.regex("^(?!auth).*$"))
  58. .build()
  59. );
  60. }
  61. List<SecurityReference> defaultAuth() {
  62. AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
  63. AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
  64. authorizationScopes[0] = authorizationScope;
  65. return newArrayList(
  66. new SecurityReference("Authorization", authorizationScopes));
  67. }
  68. }

配置完成之后,重启服务器,访问swagger默认地址 http://localhost:8081/swagger-ui.html

我们可以看到比之前页面多了一个Authorization按钮,我们可以通过点击该按钮添加token值

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg3NjU0OA_size_16_color_FFFFFF_t_70 2

这样在每次访问时都会将token值添加到header中,实现参数统一;

四:swagger2常用注解使用说明

@Api:用在请求的类上,说明该类的作用

  1. @Api:用在请求的类上,标明该类的作用
  2. tags="该类的作用"
  3. value="无意义,不需要配置"

@ApiModel:用在响应类上,返回响应数据的信息

  1. import io.swagger.annotations.ApiModel;
  2. import io.swagger.annotations.ApiModelProperty;
  3. import java.io.Serializable;
  4. /**
  5. *用于响应类上,返回响应数据信息
  6. *
  7. *@ApiModel:这种一般用在post创建的时候,使用 @RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候
  8. *@ApiModelProperty:用在属性上,描述响应类的属性
  9. */
  10. @ApiModel(description= "返回响应数据")
  11. public class RestMessage implements Serializable{
  12. @ApiModelProperty(value = "是否成功")
  13. private boolean success=true;
  14. @ApiModelProperty(value = "返回对象")
  15. private Object data;
  16. @ApiModelProperty(value = "错误编号")
  17. private Integer errCode;
  18. @ApiModelProperty(value = "错误信息")
  19. private String message;
  20. //get/set方法
  21. }

用在请求方法上,说明该方法的作用的注解

  1. @ApiOperation( 方法的用途、作用
  2. value="方法用途、作用"
  3. notes="方法备注说明"
  4. httpMethod="请求方式(get/set)"
  5. )
  6. @ApiImplicitParams({ 用于参数说明
  7. @ApiImplicitParam( 指定一个请求参数的配置信息
  8. name="参数名" ,
  9. value="参数的汉字说明、解释",
  10. required="参数是否必须传",
  11. paramType="参数放在哪个地方",
  12. · header(请求参数的获取:@RequestHeader)
  13. · query(请求参数的获取:@RequestParam)
  14. · path(用于restful接口 请求参数的获取:@PathVariable
  15. · body(不常用)
  16. · form(不常用)
  17. dataType="参数类型,默认String,其它值dataType=Integer",
  18. defaultValue="参数的默认值"
  19. )
  20. }):
  21. @ApiOperation(value = "作用",notes = "备注")
  22. @ApiResponses({ //在@ApiResponses中,错误的响应信息
  23. @ApiResponse(code=400,message="参数出错"),
  24. @ApiResponse(code=404,message="Not Found")
  25. })

更详细注解说明请到: swagger2 注解说明

发表评论

表情:
评论列表 (有 0 条评论,685人围观)

还没有评论,来说两句吧...

相关阅读

    相关 springboot集成swagger2

    swagger,中文“拽”的意思。它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试。另外swagger很容易构建restfu