Swagger2

注:看了狂神说自己所作的笔记  狂神说的笔记https://mp.weixin.qq.com/s/0-c0MAgtyOeKx6qzmdUG0w

学习目标

  • 了解Swagger的作用和概念
  • 了解前后端分离
  • 在Springboot中集成Swagger

 Swagger

前后端分离

Vue+Springboot

后端时代:前端只用管前端静态页面;后端要htmk和jsp渲染数据。

前后端分离时代

  • 后端:后端控制层,服务层,数据访问层
  • 前端:前端控制层,视图层   
  1. 伪造后端数据,json。已经存在了,不需要后端前端就可以单独运行
  • 前后端如何交互?===API
  • 前后端先对独立,松耦合
  • 前后端可以部署在不同的服务器

产生了问题

  • 前后端联调,前后端无法做到“即使协商,尽早解决“,最终导致问题集中爆发.
  • 首先制定schema【计划的提纲】,实时更新最新的Api,降低集成风险;
  • 早期:制定word计划文档;
  • 前后端分离
  1. 前端测试后端接口:postman
  2. 后端提供接口,需要实时更新最新的消息改动

Swagger

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

在项目中使用springfox;

  • swagger2
  • ui

SpringBoot集成Swagger2

1.新建springboot项目

2.pom导入swagger2的maven配置

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger2</artifactId>
   <version>2.9.2</version>
</dependency>
<!-- 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>
---------------------------------------------------------------------------------------
	<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.10.5</version>
		</dependency>

		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.10.5</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-spring-webmvc</artifactId>
			<version>2.10.5</version>
		</dependency>



2.9.2  和  2.10.5 有差别的需要多导入一个jar 不然会报一个错
@EnableSwagger2这个注解不能使用了 换成@EnableSwagger2WebMvc

3.配置swagger配置文件

@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {
}

4.访问测试页面http://localhost:8080/swagger-ui.html

 

配置Swagger

1、Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger。

@Bean //配置docket以配置Swagger具体参数
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2);
}


----------------------------------------

@Bean
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}


//配置文档信息
private ApiInfo apiInfo() {
   Contact contact = new Contact("联系人名字", "http://xxx.xxx.com/联系人访问链接", "联系人邮箱");
   return new ApiInfo(
           "Swagger学习", // 标题
           "学习演示如何配置Swagger", // 描述
           "v1.0", // 版本
           "http://terms.service.url/组织链接", // 组织链接
           contact, // 联系人信息
           "Apach 2.0 许可", // 许可
           "许可链接", // 许可连接
           new ArrayList<>()// 扩展
  );
}

配置扫描接口

1、构建Docket时通过select()方法配置怎么扫描接口。

@Bean
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
      .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
      .build();
}

--------------------------------------------------------
any() // 扫描所有,项目中的所有接口都会被扫描到
none() // 不扫描接口
// 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
withMethodAnnotation(final Class<? extends Annotation> annotation)
// 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
withClassAnnotation(final Class<? extends Annotation> annotation)
basePackage(final String basePackage) // 根据包路径扫描接口

配置Swagger开关

1、通过enable()方法配置是否启用swagger,如果是false,swagger将不能在浏览器中访问了

@Bean
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      .enable(false) //配置是否启用Swagger,如果是false,在浏览器将无法访问
      .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
      .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
       // 配置如何通过path过滤,即这里只扫描请求以/kuang开头的接口
      .paths(PathSelectors.ant("/kuang/**"))
      .build();
}
2、如何动态配置当项目处于test、dev环境时显示swagger,处于prod时不显示?

@Bean
public Docket docket(Environment environment) {
   // 设置要显示swagger的环境
   Profiles of = Profiles.of("dev", "test");
   // 判断当前是否处于该环境
   // 通过 enable() 接收此参数判断是否要显示
   boolean b = environment.acceptsProfiles(of);
   
   return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      .enable(b) //配置是否启用Swagger,如果是false,在浏览器将无法访问
      .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
      .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
       // 配置如何通过path过滤,即这里只扫描请求以/kuang开头的接口
      .paths(PathSelectors.ant("/kuang/**"))
      .build();
}

配置API分组

 

1、如果没有配置分组,默认是default。通过groupName()方法即可配置分组
@Bean
public Docket docket(Environment environment) {
   return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
      .groupName("hello") // 配置分组
       // 省略配置....
}
2、重启项目查看分组

3、如何配置多个分组?配置多个分组只需要配置多个docket即可:

@Bean
public Docket docket1(){
   return new Docket(DocumentationType.SWAGGER_2).groupName("group1");
}
@Bean
public Docket docket2(){
   return new Docket(DocumentationType.SWAGGER_2).groupName("group2");
}
@Bean
public Docket docket3(){
   return new Docket(DocumentationType.SWAGGER_2).groupName("group3");
}

注解

@Data
@ApiModel("角色模型")
public class Role {
    @ApiModelProperty("角色名称")
    private String rolename;
    @ApiModelProperty("用户ID")
    private String userId;
}

@RestController
@Api(value="用户controller",tags={"用户操作接口"})
public class HelloController {
    @ApiOperation("说你好")
    @GetMapping("hello")
    public Role sayHello(User user,@ApiParam("密码") String password,Role role)
    {
        User user1 = new User();
        user1.setAge("11");
        user1.setUsername("gene");
        return role;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值