Sprngboot配置Swagger接口文档

一、背景

小明今天要跟前端同学对接,发现接口,都是直接同个微信或者qq发给他,效率很低,而且前端同学也不能测试调用,在对接过程很麻烦,也很费时,他现在很苦恼,大家有什么好的接口文档工具推荐了。

其实现在已经有很多文档对接的工具了,以前使用的是国外的postman,到现在国内的apipost或者apifox等等,或者代码接口集成工具swagger。今天给初入职场的同学们,介绍一下如何整合Swagger以及如何配置指定环境访问。

二、整合Swagger

1.工程pom引入swagger依赖

javascript 复制代码
        <!--   整合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.新增SwaggerConfig配置文件

主要是配置swagger文档扫描的包和方法

javascript 复制代码
@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            //加了ApiOperation注解的类,才生成接口文档
            .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
            //包下的类,才生成接口文档
            //.apis(RequestHandlerSelectors.basePackage("io.renren.controller"))
            .paths(PathSelectors.any())
            .build()
            .securitySchemes(security());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("接口文档")
            .description("swagger接口文档")
            .version("3.0.0")
            .build();
    }

    private List<ApiKey> security() {
        return newArrayList(
            new ApiKey("token", "token", "header")
        );
    }

}

这里要注意的是,不要在启动类添加@EnableSwagger2,这样会导致整个工程所有接口都生成了swagger文档。

3.控制层编写接口

@Api("APP测试接口"):标注接口类,说明改类做什么

@ApiOperation(value = "登录接口", notes = "登录接口"):标注每个方法,说明改接口方法用途

@ApiImplicitParam(name = "name", value = "用户名",required = true, type = "string"):标记方法参数

javascript 复制代码
@Api("APP测试接口")
@RestController
public class SwaggerController {

    @ApiOperation(value = "登录接口", notes = "登录接口")
    @ApiImplicitParam(name = "name", value = "用户名",
                    required = true, type = "string")
    @GetMapping("/swagger/login")
    public String login(String name){

       return "登录成功 :" + name;
    }
}

三、启动工程,Swagger文档调用接口

启动项目工程,浏览器访问地址:

http://localhost:端口号/swagger-ui.html#/

点击对应接口,展开进行调试,发现可以正常调用接口

四、配置swagger指定环境访问

以上基本是完成了swagger的配置了,但是一般项目开发,为了安全起见,会禁止正式环境的访问,或者同个配置中心开启。接下来给大家介绍一下,如何动态设置swagger环境访问。

1.添加配置属性

在SwaggerConfig配置文件类前中添加注解,指定swagger.enable属性,为true,改配置类才生效

javascript 复制代码
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")

2.新建不同环境配置文件

主application.yaml文件中添加配置环境,这样启动工程就会,springboot就会自动拼接:application-dev.yaml、application-test.yaml、application-pro.yaml,然后根据profiles配置读取对应的配置文件,

javascript 复制代码
spring:
  profiles:
#  #在此选择环境 dev test pro
    active: dev

新建不同环境的application.yaml文件,后缀由dev、test、pro

application-dev.yaml配置swagger为true

javascript 复制代码
swagger:
  enable: true

application-pro.yaml配置swagger为false

javascript 复制代码
swagger:
  enable: false

3.动态修改application.yaml环境配置

其实有两种方式进行修改

一种是直接通过配置中心动态修改,项目部署上线之后,想要在在正式环境访问的话,直接修改application-pro.yaml配置swagger为true。

另一种就是同个maven构建打包的时候,自动切换读取对应的配置文件

五、总结

本文主要讲了如何配置swagger接口文档,以及如何控制不同环境访问,一般开发,根据个人经验,除非新工程,才需要配置swagger,不然都是已经大佬搭建好了,我们只要熟悉使用swagger相关注解,按照规范进行定义接口。不过控制不同环境访问,这个是我工作中遇到的,很多大佬搭建的时候,都没在意,而且网上方法也是参差不齐,

相关推荐
无相求码19 分钟前
为什么你的第二个 scanf 还没输入就直接跳过了?C语言输入缓冲区陷阱
c语言·后端
叼馒女友郭芙蓉19 分钟前
Function Calling理解
后端
玉宇夕落20 分钟前
LangChain RAG Retriever 的学习
后端
用户2986985301426 分钟前
Python 一键导出 Excel 中的图表和形状为图片
后端·python·excel
用户81300778163727 分钟前
PageHelper分页查询步骤
后端
是小李呀30 分钟前
MyBatis、MyBatis-Plus 与全自动 ORM 的本质区别
后端
小堂子这厢有礼了43 分钟前
Chet.Admin 权限模型:菜单级 + 按钮级 + 行级三层防护
前端·后端·信息可视化·前端框架·.net
SimonKing43 分钟前
Spring Boot 4.0 + gRPC 极简集成:4步搞定,比REST还丝滑
java·后端·程序员
IT_陈寒1 小时前
Vue的这个响应式陷阱,让我加班到凌晨三点
前端·人工智能·后端
Wang's Blog2 小时前
Go-Zero基础入门5: 探究go-zero如何基于gRPC扩展客户端
开发语言·后端·golang·go-zero