Swagger简介

Swagger简介

前后端分离

前端:完全脱离后端,前端独立开发,根据后端提供的接口可以事先设置一些假数据进行开发
后端:事先主要的控制层,业务逻辑,持久层,注重高可用,高并发,高扩展
前后端最后设置在不同的服务器上进行部署。
前后端分离开发是目前业界的web主流开发模式,所以两个组的文档设置就很重要,而swagger就是一个在线的接口API框架,支持多种语言。

Swagger相关依赖的导入

  <!--导入swagger-->
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>


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

Swagger的简单配置

首先创建一个controller,用来接收一个hello的请求返回简单的字符串。

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String HelloRequest(){
        return "Hello String";
    }
}

接着创建一个SwaggerConfig配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {
// 将Docket主键交给Spring容器管理
 @Bean
    public Docket docket() {
    // 选择Swagger2构造参数
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }
}
//这里需要创建ApiInfo对象,作为Docket.apiInfo方法的参数
private ApiInfo apiInfo() {
        Contact contact = new Contact("Contact Name", "blog.csdn.net", "xxxx@qq.com");
        //关于Swagger文档的信息,标题名字,简单描述,版本号,地址
        return new ApiInfo("Swagger接口文档", "后端接口文档", "0.0.1",
                "http://localhost:8080", contact, "Apache-2.0",
                "www.goole.com", new ArrayList<>());
    }

然后启动Application类,访问http://localhost:8080/swagger-ui.html
在这里插入图片描述

 @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
               // .enable(false); 构造中是true,这里如果设置成false再访问swagger.html就会出现下面这种情况
    }

默认构造是设置成true
在这里插入图片描述
设置成false就会报错

在这里插入图片描述

Swagger扫描指定接口

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    /*
    *RequestHandlerSelectors
    * 指定接口扫描方式
    * */

    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("club.qy.swagger.demo.controller"))   // any扫描全部,none不扫描
                .paths(PathSelectors.ant("/controller/**"))  //paths过滤路径,any过滤全部,rex正则过滤,none不过滤
                .build();
    }

    private ApiInfo apiInfo() {
        Contact contact = new Contact("Contact Name", "blog.csdn.net", "911168435@qq.com");
        return new ApiInfo("Swagger接口文档", "后端接口文档", "0.0.1",
                "http://localhost:8080", contact, "Apache-2.0",
                "www.goole.com", new ArrayList<>());
    }
}

@APiOperation注解主要使用在方法上,为请求的方法提供注释

@GetMapping("/name/{name}")
    @ApiOperation(value = "根据名称模糊查询分类")
    public R searchTypeByName(@PathVariable(value = "name") String name){
        if(StringUtils.isEmpty(name)) {
            return null;
        }
        List<QuestionBank> list = qbService.list(new QueryWrapper<QuestionBank>().like("product_name", name));
        return R.ok(list);
    }


@Api(value = “用户 Controller”,tags = {“用户访问接口”})
@Api注释一般作用在类上给Controller标记标签名字和注释

@RestController
@RequestMapping("/user")
@Api(value="用户 Controller",tags="用户访问接口")
public class UserController{


}

@ApiModel作用在实体类上,@ApiModelProperty作用在类的属性上,为属性添加注释,这些注释最后都是为swagger在线文档提供参考,更容易是其他开发者理解与调试。

设置多个选择框的方法:
在Swagger的配置类中,创建多个Docket组件,将其交给Spring接管,每个Docket可以设置成不同的组名和其他不同的文档标题描述等属性。

   @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("战三");
    }
    @Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("李四");
    }
    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("王五");
    }

Swagger的作用

  1. 通过Swagger可以给一些难以理解的属性和接口设置注释
  2. 接口文档实时更新
  3. 可以在线测试
posted @ 2020-07-13 23:22  起个名字都这么男  阅读(400)  评论(0编辑  收藏  举报