Swagger

  1. Swagger2
    1. 简介
    2. 为什么使用
    3. 快速入门
      1. 引入依赖
      2. 启用Swagger2
      3. 具体配置
        1. Controller配置
        2. 接口配置
        3. 实体类配置
      4. 文档信息配置类

Swagger2

简介

Swagger是一套基于 OpenAPI 规范构建的开源工具,可以帮助我们设计,构建,记录以及使用Rest API

为什么使用

当今大部分公司都采用前后端分离的模式来开发项目,前端和后端的工作由不同的工程师来完成,这种开发模式下,维持一份及时更新且完善的Rest API 文档将会极大的提高我们的工作效率

传统意义上的文档都是后端开发人员手动编写的,这种方式很难保证文档的及时性,这种文档久而久之也会失去参考意义,反而还会增加沟通成本,而Swagger给我们提供了一个全新的API文档维护方式

优点:

  • 代码变,文档变,只需要少量的注解,Swagger就可以根据代码自动生成API文档,保证了文档的及时性
  • 跨语言性,Swagger支持40多种语言
  • Swagger UI呈现出来的是一份可交互式的API文档,我们可以直接在文档中尝试API的调用,省略了复杂的参数调用过程

快速入门

引入依赖

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

启用Swagger2

在启动类上或者配置类加 @EnableSwagger2 注解

访问swagger文档: http://localhost:8080/swagger-ui.html

注意: 其中的localhost:8080在项目中都要改为真实域名+端口号

具体配置

Controller配置

@Api注解

属性:

  • tags 设置标签
  • description 设置描述信息
@RestController
@RequestMapping("/comment")
@Api(tags = "评论",description = "评论相关接口")
public class CommentController {
}

接口配置

  • @ApiOperation 接口描述
@GetMapping("/linkCommentList")
@ApiOperation(value = "友链评论列表",notes = "获取一页友链评论信息")
public ResponseResult linkCommentList(Integer pageNum,Integer pageSize){
    return commentService.linkCommentList(pageNum,pageSize);
}
  • @ApiImplicitParam ** 用于描述接口的非对象参数,但是一个接口可能有多个参数,所以一般与@ApiImplicitParams **组合使用
@GetMapping("/linkCommentList")
@ApiOperation(value = "友链评论列表",notes = "获取一页友链评论信息")
@ApiImplicitParams({
        @ApiImplicitParam(name = "pageNum",value = "页号"),
        @ApiImplicitParam(name = "pageSize",value = "每页大小")
})
public ResponseResult linkCommentList(Integer pageNum,Integer pageSize){
    return commentService.linkCommentList(pageNum,pageSize);
}

实体类配置

@ApiModel 用于描述实体类

@ApiModelProperty 用于描述实体的属性

@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "添加评论Dto")
public class AddCommentDto {

    private Long id;
    //评论类型(0代表文章评论,1代表友链评论)
    @ApiModelProperty(notes = "评论类型(0代表文章评论,1代表友链评论)")
    private String type;
    //文章id
    @ApiModelProperty(notes = "文章id")
    private Long articleId;
    //...   
}

在实际开发中,我们一般不会用与数据库建立表关系的对象来接收前端传输的数据,接收参数和实际数据库中的表字段也不一定完全相同

这样子在使用Swagger注解的时候也会和不同的方法需要接收的参数产生耦合

因此我们一般会封装一层DTO对象(Data Transaction Object数据传输对象,数据事务对象)

修改表现层参数

@PostMapping
public ResponseResult comment(@RequestBody AddCommentDto addCommentDto){
    Comment comment = BeanCopyUtils.copyBean(addCommentDto, Comment.class);
    return commentService.comment(comment);
}

这里接收到的CommentDto对象再拷贝成Comment对象即可

文档信息配置类

加上**@Configuration注解**

需要返回一个Docket对象,加上**@bean注解**

使用了构造器模式创建了Docket和apiInfo

  • 配置当前项目的一些基本信息
@Configuration
public class SwaggerConfig {

    @Bean
    public Docket customDocket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //扫描的包
                .apis(RequestHandlerSelectors.basePackage("com.os467.controller"))
                .build();
    }

    private ApiInfo apiInfo() {
        Contact contact = new Contact("团队名","http://www.my.com","my@my.com");
        return new ApiInfoBuilder()
                .title("文档标题")
                .description("文档描述")
                .contact("联系方式")
                .version("1.1.0")
                .build();
    }

}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1300452403@qq.com

文章标题:Swagger

字数:1k

本文作者:Os467

发布时间:2022-10-05, 00:51:35

最后更新:2022-10-05, 00:53:10

原始链接:https://os467.github.io/2022/10/05/Swagger/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏