本文介绍

本文主要介绍了swagger的常用配置,涉及无token,局部token,全局token,环境限制,多人开发等模块,基本满足项目中的所有使用。

基本配置流程(无token)

1. 引入依赖

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

2. 创建配置类

@EnableSwagger2 开启配置

@Configuration
@EnableSwagger2
public class MySwaggerConfig {
    /**
     * 创建API应用
     * apiInfo() 增加API相关信息
     * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
     * 本例采用指定扫描的包路径来定义指定要建立API的目录。
     * 多人开发可以设置多个Docket
     * @return
     */
    @Bean
    public Docket createRestApi(Environment environment) {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(this.apiInfo())
                .groupName("小组管理系统")
                //false 则不能在浏览器访问,true为默认。
                .enable(true)
                .select()
                //配置扫描接口的方式,基于包去扫描
                .apis(RequestHandlerSelectors.basePackage("com.marchsoft.group.manager.system.controller"))
                //paths()过滤什么路径
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * 创建该API的基本信息(这些基本信息会展现在文档页面中)
     * 访问地址:http://项目实际地址/swagger-ui.html
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("springboot利用swagger构建api文档")
                .description("基于小组管理的学生管理员系统")
                .termsOfServiceUrl("https://XXXX/XXXXX/group-manager/tree/develop/")
                .version("1.0")
                .build();
    }
}

3.创建实体类

@ApiModel(value="学生DTO对象", description="返回所有S学生最基本的信息") 作用在模型上,介绍当前模型

@ApiModelProperty(value = "id") 介绍当前模型的某个属性

4. 创建接口

介绍当前接口的基本信息,及作者

@ApiOperation(value = "获取某一学生的详细信息",notes = " \n author:zhangh")

介绍当前接口的参数

@ApiImplicitParams({@ApiImplicitParam(name = "id",value = "")})

	接口一:前端传递一个id
    @ApiOperation(value = "获取某一学生的详细信息",notes = " \n author:zhangh")
    @ApiImplicitParams({
            	@ApiImplicitParam(name = "id",value = "")
    })
    @PreAuthorize("hasAuthority('super_admin')")
    @GetMapping("/{id}")
    public Result getStudent(@PathVariable("id")    Long id) {
        StudentDTO student = studentService.getStudent(id);
        return Result.success(student);
    }
    
    接口二:  用于展示使用     前端传递的是一个对象
        @PutMapping("/update")
    public Result updateStudent(@RequestBody StudentDTO studentDTO){
        return null;
    }

5. 测试使用(无token)

在无token的情况下,我们配置到这里既能实现基本的功能了。

启动服务,访问swagger路径:

http://localhost:9898/swagger-ui.html

配置token

如果我们的系统中使用了token,那么在swagger测试时,毫无疑问,也是需要添加的。接下来介绍token添加的两种方法。

局部token

我们需要手动给每个接口都添加token信息。麻烦!

原理

调用Docket的globalOperationParameters()方法,并传入token基本配置信息

配置使用:

this.apiInfo()这个方法在基本配置(无token中有源码,这里就不重复添加了)

globalOperation()详情

    /***
     * @Author 
     * @Description  单一配置token
     * @Data 23:38 2021/1/29
     * @param
     * @return java.util.List<springfox.documentation.service.Parameter>
     */
    private List<Parameter> globalOperation(){
        //添加head参数配置start
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        //第一个token为传参的key,第二个token为swagger页面显示的值
        tokenPar.name("Authorization")
                .description("token")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                //token前缀
                .defaultValue("Bearer ")
                .required(false).build();
        pars.add(tokenPar.build());
        return pars;
    }

测试使用

配置对照

传递对象

查看详情

全局token

刚刚我们配置了局部token,虽然我们能满足使用,但是过于麻烦,接下来我们配置一下全局token。

原理:

使用Docket提供的配置方案配置上下文的两个方法。

使用步骤

在docket中配置上述两个方法,并传入参数

两个方法的配置信息:

    //设置基本的介绍信息
    private List<ApiKey> securitySchemes() {
        List<ApiKey> apiKeyList = new ArrayList<>();
        apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
        return apiKeyList;
    }
    //过滤不需要进行验证的页面
    private List<SecurityContext> securityContexts() {
        List<SecurityContext> securityContexts = new ArrayList<>();
        securityContexts.add(
                SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        //带有auth的页面将不用提供token即可访问。
                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
                        .build());
        return securityContexts;
    }
    //全局的token配置
    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> securityReferences = new ArrayList<>();
        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
        return securityReferences;
    }

测试使用

扩展使用

1.正式环境下不可使用接口文档

  • 系统通常分为三种环境,开发环境(dev),测试环境(test),正式上线(pro)。
  • 接口测试只能在dev和test环境下进行,正式上线后是严禁进行接口测试的。
  • swagger也为我们提供了相应,我们可以在dev和test环境下测试,pro环境下不能进行测试。

配置方式

 //在开发或者测试服务器使用swagger,正式环境没有swagger
        //设置要显示的Swagger环境
        Profiles profiles = Profiles.of("dev","test");
        boolean flag = environment.acceptsProfiles(profiles);

效果

2.多人协作下的接口文档

我们在正常开发中,每个人负责的模块可能都不一样,如果所有人都在一个swagger页面进行操作,那么是相当混乱的,这时我们就可以使用swagger提供的分组机制。

原理分析

所谓分组,就是创建多个docket对象

配置步骤

创建两个Docket

测试效果

swagger常用注解

参考文章

写此文章时,学识尚浅,很感谢有这些大佬blog的帮助。

狂神说SpringBoot14:集成Swagger终极版

https://mp.weixin.qq.com/s/0-c0MAgtyOeKx6qzmdUG0w

SpringBoot整合Springfox-Swagger2

https://www.cnblogs.com/yichunguo/p/12665857.html#1%E3%80%81swagger%E7%AE%80%E4%BB%8B

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐