六.Swagger的实战使用
1.什么是swagger
2.swagger的基本使用
3.swagger实战使用
六.Swagger的实战使用
1.什么是swagger
- swagger是后端接口文档的生成并且提供ui界面进行测试
- 过去用postman测试
缺点:需要自己写地址,如果项目变了需要自己更改
2.swagger的基本使用
①mybatis-plus代码生成器支持swagger(项目中代码生成器可以直接加入swagger注解)
- 原理
代码生成器根据数据表中的描述字段来生成对实体类的文档描述
package com.atguigu.srb.core;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;
public class CodeGenerator {
@Test
public void genCode() {
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("Likejin");
//open等于true时,生成完代码后,打开资源管理器
gc.setOpen(false); //生成后是否打开资源管理器
//去掉service接口前缀I
gc.setServiceName("%sService"); //去掉Service接口的首字母I
//自增策略
gc.setIdType(IdType.AUTO); //主键策略
//自动生成接口文档@API
gc.setSwagger2(true);//开启Swagger2模式
mpg.setGlobalConfig(gc);
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:13306/db200921_srb_core?useUnicode=true&characterEncoding=utf8&useSSL=false");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("abc123");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.atguigu.srb.core");
pc.setEntity("pojo.entity"); //此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
mpg.setPackageInfo(pc);
// 5、策略配置
//能够完成数据库表名从下划线到类的驼峰习惯
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
//能够完成数据库字段名从下划线到类的属性驼峰习惯
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
//使用lombok的注解修饰
strategy.setEntityLombokModel(true); // lombok
//生成逻辑删除字段名
strategy.setLogicDeleteFieldName("is_deleted");//逻辑删除字段名
//符合阿里巴巴规范,去掉is前缀
strategy.setEntityBooleanColumnRemoveIsPrefix(true);//去掉布尔值的is_前缀(确保tinyint(1))
//和controller的生成有关,全部使用@RestController
strategy.setRestControllerStyle(true); //restful api风格控制器,restController返回json数据
mpg.setStrategy(strategy);
// 6、执行
mpg.execute();
}
}
②swagger文档的生成和ui界面
- 引入pom
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
- swaager的配置
生成分组
package com.atguigu.srb.base.config;
import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class Swagger2Config {
//生成admin分组
@Bean
public Docket adminApiConfig() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("adminApi")//增加分组
//增加分组的描述
.apiInfo(adminApiInfo())
.select()
//对路径为/admin的接口分到一组
.paths(Predicates.and(PathSelectors.regex("/admin/.*")))
.build();
}
private ApiInfo adminApiInfo(){
return new ApiInfoBuilder()
.title("尚融宝后台管理系统API文档")
.description("本文档描述了尚融宝管理系统各个接口的调用方式")
.contact(new Contact("like","www.baidu.com","13030@qq.com"))
.build();
}
//生成web分组
@Bean
public Docket webApiConfig() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("webApiInfo")
.apiInfo(adminApiInfo())
.select()
.paths(Predicates.and(PathSelectors.regex("/api/.*")))
.build();
}
private ApiInfo webApiInfo(){
return new ApiInfoBuilder()
.title("尚融宝网站API文档")
.description("本文档描述了尚融宝网站各个接口的调用方式")
.contact(new Contact("like","www.baidu.com","13030@qq.com"))
.build();
}
}
③实体类描述
- 能够生成实体类的描述字段
@ApiModel对实体类表名的描述
@ApiModelProperty对实体类字段的描述
package com.atguigu.srb.core.pojo.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 积分等级表
* </p>
*
* @author Likejin
* @since 2023-04-09
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="IntegralGrade对象", description="积分等级表")
public class IntegralGrade implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "编号")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "积分区间开始")
private Integer integralStart;
@ApiModelProperty(value = "积分区间结束")
private Integer integralEnd;
@ApiModelProperty(value = "借款额度")
private BigDecimal borrowAmount;
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
@ApiModelProperty(value = "更新时间")
private LocalDateTime updateTime;
@ApiModelProperty(value = "逻辑删除(1:已删除,0:未删除)")
@TableField("is_deleted")
@TableLogic
private Boolean deleted;
}
- 生成controller接口的描述
@API 接口名称的描述
@ApiOperation 接口内每一个方法的描述
package com.atguigu.srb.core.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 积分等级表 前端控制器
* </p>
*
* @author Likejin
* @since 2023-04-09
*/
@Api(tags = "网站积分接口")
@RestController
@RequestMapping("/api/core/integralGrade")
public class IntegralGradeController {
@ApiOperation("测试接口")
@GetMapping("/test")
public void test(){
return;
}
}
package com.atguigu.srb.core.controller.admin;
import com.atguigu.srb.core.pojo.entity.IntegralGrade;
import com.atguigu.srb.core.service.IntegralGradeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 积分等级表 前端控制器
* </p>
*
* @author Likejin
* @since 2023-04-09
*/
@Api(tags="积分等级管理")
@CrossOrigin
@RestController
@RequestMapping("/admin/core/integralGrade")
public class AdminIntegralGradeController {
@Resource
private IntegralGradeService integralGradeService;
@ApiOperation("积分等级列表")
@GetMapping("/list")
public List<IntegralGrade> listAll(){
return integralGradeService.list();
}
@ApiOperation("根据ID删除数据记录")
@DeleteMapping("/remove/{id}")
public boolean removeById(
@ApiParam("数据id")
@PathVariable Long id){
return integralGradeService.removeById(id);
}
}
3.swagger实战使用(代码同上)
①引入依赖
②Swagger配置config
- 生成文档
- 配置分组(利用接口地址配置分组)
③Swagger控制实体类
- 对类名的描述@ApiModel
- 对类属性的描述@ApiModelProperty
④Swagger控制controller
- 对接口描述@Api
- 对接口中具体方法描述@ApiOperation
⑤结果
- 访问项目的接口文档
http://localhost:8110/swagger-ui.html - 分组结果
- 接口描述
- 实体类描述