swagger

Posted on   琴音似君语  阅读(40)  评论(0编辑  收藏  举报

Swagger

  • 号称世界上最流行的Api框架;
  • RestFul Api文档在线自动生成工具==》Api文档与API定义同步更新
  • 直接运行,可以在线测试API接口;
  • 支持多种语言:java、php……

官网:API文档和团队设计工具 |斯瓦格 (swagger.io)

在项目使用Swagger需要 springbox;

  • swagger2
  • swagger3
  • ui

SpringBoot集成Swagger

  1. 新建一个SpringBoot-web项目

  2. 导入相关依赖

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>3.0.0</version>
    </dependency>
        
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>3.0.0</version>
    </dependency>
    
  3. 编写Hello工程

  4. 配置swagger==》config

    @Configuration
    @EnableSwagger2   //开启Swagger2
    public class SwaggerConfig{
        
    }
    
  5. 测试运行:http://localhost:8080/swagger-ui.html

配置Swagger

Swagger的bean实例

SwaggerConfig配置类:

@Configuration
@EnableSwagger2   //开启Swagger2
public class SwaggerConfig{
    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .enable(false)//enable是否启动swagger,如果为False,则Swagger不能在浏览器中访问
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.xueqin.swagger.controller"))//.paths(PathSelectors.ant("/xueqin/**"))
            .build;
    }
    
    //配置Swagger信息=apiInfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("雪琴""地址","电子邮寄")
        return new ApiInfo(
            "雪琴的Swagger文档""描述文本",
            "版本号",
            "服务地址",
            contact,
            "Apache 2.0",
            "dizhi",
            new ArrayList()
        )
    }
}

我只希望我的Swagger在生产环境中使用,在发布的时候不使用?

  • 判断是不是生产环境 flag=flase
  • 注入enable()
    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment){
        //设置要显示的Swagger环境
        Profiles profiles = Profiles.of("dev","test");
        //通过environment.acceptsProfiles判断是否处在自己设置的环境当中
        boolean flag = environment.acceptsProfiles(profiles);
        System.out.println(flag);
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .enable(false)//enable是否启动swagger,如果为False,则Swagger不能在浏览器中访问
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.xueqin.swagger.controller"))//.paths(PathSelectors.ant("/xueqin/**"))
            .build;
    }

配置API文档的分组

.groupName("雪琴")

如何配置多个分组;多个Docket实例即可

	@Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("A");
    }
	@Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("B");
    }
	@Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("C");
    }

实体类配置:

//@Api(注释)
@ApiModel("用户实体类")
public class User{
    @ApiModelProperty("用户名")
    public String username;
    @ApiModelProperty("密码")
    public String password;
}

controller:

@RestController
public class HelloController{
    @GetMapping(value = "/hello")
    public String hello(){
        return "hello";
    }
    //只要我们的接口中,返回值中存在实体类,它就会扫描到Swagger中
    @PostMapping(value = "/user")
    public USer user(){
        return new User();
    }
    //Operation接口,不是放在类上的,是方法
    @ApiOperation("Hello2控制类")
    @GetMapping(value = "/hello2")
    public String hello2(@ApiParam("用户名") String username){
        return "hello"+username;
    }
    @ApiOperation("Postce测试类")
    @PostMapping(value = "/postt")
    public User postt(@ApiParam("用户名") User user){
        int i = 5/0;
        return user;
    }
}

总结

  1. 我们可以通过swagger给一些比较难理解的属性或者接口,增加注释信息
  2. 接口文档实时更新
  3. 可以在线测试

Swagger是个优秀的工具,几乎所以大公司都在用它

【注意点】在正式发布的时候,关闭Swagger!!!出于安全考虑。而且节省运行的内存;

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异

随笔 - 18, 文章 - 0, 评论 - 0, 阅读 - 185

Copyright © 2025 琴音似君语
Powered by .NET 9.0 on Kubernetes

点击右上角即可分享
微信分享提示