springboot与Swagger集成

springboot与Swagger集成

1. 认识swagger

主要作用是为了前后端分离

1.1 概念

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步(来自百度)

1.2 特点

  • 目前最流行的API框架
  • RESTful api文档的在线生成工具 ==》API文档与API定义保持同步
  • 直接运行,在线进行接口测试
  • 支持多种语言

2. java项目中使用swagger-前提

依赖的话,一般都是jar文件。swagger也不例外,到maven仓库下载即可

在项目中使用swagger需要springfox;

     -  swagger2
     -  ui

3. springboot集成swagger

3.1 新建项目

新建一个springboot web项目(我是使用idea创建,当然也可以通过官网创建,原理相同)

我使用的是gradle创建(maven也是可以的);
在这里插入图片描述

3.2 导入相关依赖

// https://mvnrepository.com/artifact/io.springfox/springfox-swagger2
compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
// https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui
compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'

3.3 最简单的demo演示

其实,这样就可以了,只需要在springboot启动类上,加上一个开启swagger的注解,就可以访问ui页面

话不多说,先上图吧!

  • 开启swagger
@SpringBootApplication
@EnableSwagger2
public class SwaggerdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SwaggerdemoApplication.class, args);
    }

}
  • hello world
@RestController
public class hello {
    @GetMapping("/hello")
    public String hello() {
        return "hello world";
    }
}
  • 访问ui页面

一个最简单的swagger页面就产生了

localhost:8080/swagger-ui.html
在这里插入图片描述

4. 配置swagger

我们需要对swagger配置信息重新配置,来覆盖默认的配置信息。

首先创建一个swagger的配置类 SwaggerConfig

使用springboot配置注解以及开启swagger注解(开启此配置文件的话,会覆盖SwaggerdemoApplication的swagger注解)

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public  Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }
    
    public static final Contact CONTACT = new Contact(
            "小猿帅大人",
            "xiaoyuanshuai.com",
            "swagger@xiaoyuanshuai.com.cn");
    
    public ApiInfo apiInfo(){
        return new ApiInfo(
                "Swagger API文档",
                "这是swagger api文档的演示项目",
                "1.0",
                "urn:tos",
                CONTACT,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<VendorExtension>());
    }
}

5. 配置扫描接口以及开关

在上述的接口中,不难发现有一个接口base-erro-controller这个接口,不是我写的。但却被swagger扫描到了。

前面也说了,在不配置任何信息的情况下,使用的是默认配置。我们可以根据自己实现的docket实例,覆盖这些选项。改成我们自己需要的swagger api文档的样子。

说白了就是逐渐完善docket实例的过程。为它增加有参构造函数,给方法复制的过程。感兴趣的话,下去可以自己阅读源码。进行更多配置。

下面介绍docket对象的一个方法-select()

使用**select()**方法有多种,建议阅读源码自行选择

这里配置了以扫描包的形式,确定哪些接口展示在swagger-ui里

    @Bean   
    public  Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
              .apis(RequestHandlerSelectors.basePackage("com.ws.swaggerdemo.controller"))
                .build();
    }

配置扫描接口也有多种方式

  • 通过类的注解
  • 通过方法的注解

6 分组以及接口常用注解

6.1 分组

可以看到我上面接口,有一个标注,是分组信息。大概能知道,swagger是有分组功能。每个docket实例中都有一个groupname,因此,多个分组可以写多个docket实例。

    @Bean
    public  Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("new group")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.ws.swaggerdemo.controller"))
                .build();
    }
    @Bean
    public  Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("one group")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.ws.swaggerdemo.controller"))
                .build();
    }
    @Bean
    public  Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("two group")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.ws.swaggerdemo.controller"))
                .build();
    }

效果图:
在这里插入图片描述

6.2 常用注解

当我们给具体的接口添加自己的信息时,就需要为,类,方法,字段,参数等添加注解。

接口注解
  • @Api:用在请求的类上,表示对类的说明 tags=“说明该类的作用,可以在UI界面上看到的注解”

  • @ApiOperation:描述方法的注解,用来描述方法的用途、作用 。value=“说明方法的用途、作用” notes=“方法的备注说明”, 可以点击查阅源码自行,思考有哪些参数

  • @ApiImplicitParams:用在请求的方法上,表示一组参数说明

  • @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面 name:参数名 value:参数的汉字说明、解释 required:参数是否必须传 paramType:参数类型

@Api(value = "类描述",tags = {"hello demo功能"})
@RestController
public class hello {
    @ApiOperation(value = "返回用户 hello",notes = "方法的具体描述信息")
    @ApiImplicitParams({@ApiImplicitParam(name ="des",value = "描述", paramType = "String"),
                        @ApiImplicitParam(name ="name",value = "用户名", paramType = "String",required = true),
                        @ApiImplicitParam(name ="passworld",value = "密码", paramType = "String",required = true)})
    @GetMapping("hello2")
    public User hello2(String des,String name, String passworld){
        return  new User();
    }
}

效果
在这里插入图片描述

实体类注解
  • @ApiModel:用在实体类上的注释(实体类被ui页面显示的条件是,定义的扫描接口中返回了该实体类)

  • @ApiModelProperty:用在实体类的字段属性的注释

    @ApiModel(value = "user实体类")
    public class User {
    
        @ApiModelProperty(value = "用户名称",required = true)
        public String name;
    
        @ApiModelProperty(value = "用户密码",required = true)
        public String passworld;
    
        @ApiModelProperty(value = "用户描述")
        public String des;
    }
    

    效果
    在这里插入图片描述

7 小结

综上基本可以上手swagger,大概介绍那么多,我们也能发现。swagger那么多注解,其实本身对代码逻辑没有半点影响。

这样做的好处,就是能有方便协同开发,提升效率等等。也可以方便测试。点击try it out进行测试。功能可比postman。

  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值