六.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 {@Testpublic 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接口前缀Igc.setServiceName("%sService"); //去掉Service接口的首字母I//自增策略gc.setIdType(IdType.AUTO); //主键策略//自动生成接口文档@APIgc.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的生成有关,全部使用@RestControllerstrategy.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分组@Beanpublic 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分组@Beanpublic 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")@TableLogicprivate 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 {@Resourceprivate 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 - 分组结果
- 接口描述
- 实体类描述