接口文档生成神器-Swagger3

简介: 如果你是后端`java`开发程序员,你应该遇到过这样的场景,你的接口写完了,但是没有写接口文档,前端的小姐姐在焦急等待你的文档,那么你可能给小姐姐留下了一个不好的印象,那么有没有一款自动生成接口文档的工具呢? 答案是有,今天它来了。`swagger`旨在帮助开发者摆脱写文档的烦恼,通过几个简单的注解,就可以生成很全面的接口文档。本文旨在快速上手使用`swagger`生成接口文档,不得不说`swagger3`真香!!!

一、依赖

添加依赖和spring-boot-starter-parent的版本有关,自动引入的spring-plugin-core包版本不一致会导致项目跑不起来,这里是个大坑,帮你踩了,拿走不谢。

1.1、2.1.x版本

<dependency>

   <groupId>io.springfox</groupId>

   <artifactId>springfox-boot-starter</artifactId>

   <version>3.0.0</version>

   <exclusions>

       <exclusion>

           <artifactId>spring-plugin-core</artifactId>

           <groupId>org.springframework.plugin</groupId>

       </exclusion>

   </exclusions>

</dependency>

<dependency>

   <groupId>org.springframework.plugin</groupId>

   <artifactId>spring-plugin-core</artifactId>

   <version>2.0.0.RELEASE</version>

</dependency>

1.2、2.3.x版本

<dependency>

   <groupId>io.springfox</groupId>

   <artifactId>springfox-boot-starter</artifactId>

   <version>3.0.0</version>

</dependency>

二、配置

2.1、启动类

启动类添加@EnableOpenApi注解,然并卵,经过测试不加也可以(黑人问号脸.jpg),到底加还是不加,看你心情吧。

@EnableOpenApi

@SpringBootApplication

publicclassSwagger3DemoApplication {

   publicstaticvoidmain(String[] args) {

       SpringApplication.run(Swagger3DemoApplication.class, args);

   }

}

2.2、swagger配置

可以根据EnvironmentProfiles对象来控制不同环境文档地址是否对外暴漏

@Configuration

publicclassSwaggerConfig {

   @Bean

   publicDocketinitDocket(Environmentenv) {

       //设置要暴漏接口文档的配置环境

       Profilesprofile=Profiles.of("dev", "test");

       booleanflag=env.acceptsProfiles(profile);

       returnnewDocket(DocumentationType.OAS_30)

               .apiInfo(apiInfo())

               .enable(flag)

               .select()

               .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))

               .paths(PathSelectors.any())

               .build();

   }

   privateApiInfoapiInfo() {

       returnnewApiInfoBuilder()

               .title("Swagger3-Demo接口文档")

               .description("技术支持-xxx技术团队")

               .contact(newContact("xxx技术团队", "http://www.xxx.com", "xxx@cloud.com "))

               .version("1.0")

               .build();

   }

}

三、常用注解

3.1、类

@Api():表示这个类是 swagger 资源

  • tags:表示说明内容,只写 tags 就可以省略属性名
  • value:同样是说明,不过会被 tags 替代,没卵用

3.2、方法上

@ApiOperation() :对方法的说明,注解位于方法上

  • value:方法的说明
  • notes:额外注释说明
  • response:返回的对象
  • tags:这个方法会被单独摘出来,重新分组,若没有,所有的方法会在一个Controller分组下

3.3、方法入参

@ApiParam():对方法参数的具体说明,用在方法入参括号里,该注解在post请求参数时,参数名不显示

  • name:参数名
  • value:参数说明
  • required:是否必填

@ApiImplicitParam对方法参数的具体说明,用在方法上@ApiImplicitParams之内,该注解在get,post请求参数时,参数名均正常显示

  • name 参数名称
  • value 参数的简短描述
  • required 是否为必传参数
  • dataType 参数类型,可以为类名,也可以为基本类型(String,int、boolean等)指定也不起作用,没卵用
  • paramType 参数的传入(请求)类型,可选的值有path, query, body, header or form。
类型 作用
path 以地址的形式提交数据
query 直接跟参数完成自动映射赋值
body 以流的形式提交 仅支持POST
header 参数在request headers 里边提交
form 以form表单的形式提交 仅支持POST

3.4、实体

@ApiModel描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)

  • value model的别名,默认为类名
  • description model的详细描述

@ApiModelProperty描述一个model的属性

  • value 属性简短描述
  • example 属性的示例值
  • required 是否为必须值

3.5、header参数

@ApiImplicitParams({      @ApiImplicitParam(paramType="header",name="USERTOKEN",dataType="String",required=true,value="用户token")

   })

3.6、map入参

这个注解

3.7、file入参

需要使用@RequestPart 注解

@ApiOperation(value="上传文件接口",notes="上传文件接口")

   @ApiImplicitParams({

           @ApiImplicitParam(name="name", value="上传人")

   })

   @PostMapping(value="/uploadFile")

   publicStringuploadFile(@RequestParam("name") Stringname,@RequestPart("file") MultipartFilefile){

       

   }

四、拦截器放行

若项目中有使用拦截器,放行以下路径

@Configuration

publicclassWebConfigimplementsWebMvcConfigurer {

   @Autowired

   TokenInterceptortokenInterceptor;

   /**

    * 拦截器

    * @param registry

    */

   @Override

   publicvoidaddInterceptors(InterceptorRegistryregistry) {

       // 注册token拦截器

       registry.addInterceptor(tokenInterceptor)

               .addPathPatterns("/**")

               .excludePathPatterns("/**/swagger-ui/**")

               .excludePathPatterns("/**/swagger-resources/**")

               .excludePathPatterns("/**/v3/**")

       ;

   }

}

五、文档访问地址

http://ip:port/context-path/swagger-ui/

http://ip:port/context-path/swagger-ui/index.html

相关文章
|
JSON Shell API
ThinkPHP5使用Swagger-php接口文档
ThinkPHP5使用Swagger-php接口文档
245 0
|
2月前
|
API
23_Swagger接口文档
23_Swagger接口文档
23 0
|
4月前
|
前端开发 应用服务中间件 nginx
使用swagger和knife4j生成的接口文档在浏览器中输入地址后报404错误
使用swagger和knife4j生成的接口文档在浏览器中输入地址后报404错误
103 0
|
8月前
|
运维 前端开发 JavaScript
Swagger生成接口文档
Swagger生成接口文档
114 0
|
9月前
|
前端开发 数据可视化 Java
Swagger 接口文档 | knife4j 增强方案
Swagger 接口文档 | knife4j 增强方案
126 0
Swagger 接口文档 | knife4j 增强方案
|
9月前
|
JSON Java API
SpringBoot集成Swagger2自动生成API接口文档
SpringBoot集成Swagger2自动生成API接口文档
110 0
|
10月前
|
安全 数据可视化 Java
Swagger 自动生成 Api 文档:简化接口文档编写
自动生成 API 文档的好处不言而喻,它可以提供给你的团队或者外部协作者,方便 API 使用者准确地调用到你的 API。为了降低手动编写文档带来的错误,很多 API 开发者会偏向于寻找一些好的方法来自动生成 API 文档。
Swagger 自动生成 Api 文档:简化接口文档编写
|
10月前
|
前端开发 数据可视化 安全
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(下)
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(下)
120 0
|
10月前
|
存储 SQL Java
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(上)
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(上)
68 1
|
11月前
|
SpringCloudAlibaba 前端开发 Java
SpringCloud Alibaba微服务实战十一 - Swagger接口文档聚合
SpringCloud Alibaba微服务实战十一 - Swagger接口文档聚合
434 0