Swagger 笔记

1.Swagger简介

作为后端程序开发,我们多多少少写过几个后台接口项目,不管是编写手机端接口,还是目前比较火热的前后端分离项目,前端与后端都是由不同的工程师进行开发,那么这之间的沟通交流通过接口文档进行连接。但往往伴随很多问题,后端程序员认为编写接口文档及维护太花费时间精力,前端的认为接口文档变动更新不及时,导致程序之间相互调用出行问题。那么能简化接口文档的编写直接自动生成吗?当然能!如是乎Swagger这种接口文档在线自动生成工具便孕育而生。

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。

wagger优点

  • 代码变,文档变。只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,很好的保证了文档的时效性。
  • 跨语言性,支持 40 多种语言。
  • Swagger UI 呈现出来的是一份可交互式的 API 文档,我们可以直接在文档页面尝试 API 的调用,省去了准备复杂的调用参数的过程。
  • 还可以将文档规范导入相关的工具(例如 Postman、SoapUI), 这些工具将会为我们自动地创建自动化测试

2.SpringBoot中整合Swagger

1.引入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

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

    </dependencies>

2.主启动类

@SpringBootApplication
public class SwaggerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SwaggerApplication.class, args);
    }
}

3.Controller层 

@RestController("zhang")
public class MyController {

    @ApiOperation("Controll")
    @GetMapping(value = "/get")
    public String getTest(String payload){
        System.out.println("zhang");
        return "zhangjunjie";
    }

}

4.Configuration层


@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
               return new Docket(DocumentationType.SWAGGER_2)
                .groupName("A")
               .apiInfo(apiInfo())
                .enable(true) //是否开启Swagger
                .select()
                //RequestHandlerSelectors 扫描包的方式
                //basePackage:指定扫描的包
                //any 全部扫描 get
                //withClassAnnotation 扫描类上的注解
                //withMethodAnnotation
                .apis(RequestHandlerSelectors.basePackage("com.example.swagger.MyController"))
                //paths 访问路径
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("乐优商城订单系统")
                .description("乐优商城订单系统接口文档")
                .version("1.0")
                .build();
    }
}
  • Docket(DocumentationType.SWAGGER_2) :这是一个Swagger实例的接口文档版本
  • new ApiInfoBuilder() : 构建Docket需要创建 ApiInfo 实例
  • 构建Docket时通过 select() 方法配置扫描接口
  • ApiInfo 主要作用是构建我们接口文档的页面显示的基础信息
  • groupName("A") :表示此Docket实例的名字,也就是接口文档页面右上角选择的实例名,实际开发中我们是多人开发,对应的就是多个Docket实例
  • enable(flag) : enable() 是否启用Swagger,默认是true

运行启动后,输入地址 http://localhost:8080/swagger-ui.html

可以看到Swagger接口界面

3. 实体类配置

@ApiModel("用户实体")
public class User {
    @ApiModelProperty("用户名")
    public String name="zhang";
    @ApiModelProperty("用户密码")
    public String password="123";

}

只要这个实体在请求接口的返回值上(即使是泛型),都能映射到实体项中:

@GetMapping(value = "/getUser")
    public User getUser(){
        System.out.println("getUser");
        return new User();
    }

3.常用注解 

我们也可以在接口上添加注释说明,方便我们在接口文档中解释说明接口的信息,例如接口的作用、参数说明等,方便调用者使用.

Swagger注解简单说明
@Api(tags = “xxx模块说明”)作用在模块类上
@ApiOperation(“xxx接口说明”)作用在接口方法上(Controller层的接口方法上)
@ApiModel(“xxxPOJO说明”)作用在模型类上:如VO、BO(作用在实体类模块上)
@ApiModelProperty(value = “xxx属性说明”,hidden = true)作用在类方法和属性上,hidden设置为true可以隐藏该属性(作用在实体类的方法与属性上)
@ApiParam(“xxx参数说明”)作用在参数、方法和字段上,类似@ApiModelProperty(Controller层的接口方法参数上,用来说明参数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值