• swagger使用教程——快速使用swagger


    Swagger使用教程——快速上手swagger

    一、swagger简介

    官网:https://swagger.io/

    1、认识swagger

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

    作用:

    1. 接口的文档在线自动生成。

    2. 功能测试。

    2、Swagger是一组开源项目,其中主要要项目如下:

    1. Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 1.2文档转换成Swagger 2.0文档等功能。

    2. Swagger-core: 用于Java/Scala的的Swagger实现。与JAX-RS(Jersey、Resteasy、CXF…)、Servlets和Play框架进行集成。

    3. Swagger-js: 用于JavaScript的Swagger实现。

    4. Swagger-node-express: Swagger模块,用于node.js的Express web应用框架。

    5. Swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。

    6. Swagger-codegen:一个模板驱动引擎,通过分析用户Swagger资源声明以各种语言生成客户端代码。

    二、SpringBoot集成Swagger

    1、新建SpringBoot项目,导入swagger依赖

     
    
        io.springfox
        springfox-swagger2
        2.9.2
    
    
    
        io.springfox
        springfox-swagger-ui
        2.9.2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2、编写swagger的配置文件

    @Configuration
    @EnableSwagger2
    public class Swagger2Config {
        /**
         * 创建API应用
         * apiInfo() 增加API相关信息
         * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
         * 指定扫描的包路径来定义指定要建立API的目录。
         * @return
         */
        @Bean
        public Docket coreApiConfig(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(adminApiInfo())
                    .groupName("adminApi")
                    .select()
                    //只显示admin下面的路径
                    .paths(Predicates.and(PathSelectors.regex("/admin/.*")))
                    .build();
        }
    
        private ApiInfo adminApiInfo(){
            return new ApiInfoBuilder()
                    .title("尚融宝后台管理系统--api文档")
                    .description("尚融宝后台管理系统接口描述")
                    .version("1.0")
                    .contact(new Contact("李燕茹","http://baidu.com","728831102@qq.com"))
                    .build();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    3、添加文档内容

    在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,描述的主要来源是函数的命名,通常需要自己增加一些说明来丰富文档内容。

    Swagger使用的注解及其说明:

    @Api:用在类上,说明该类的作用。
    @ApiOperation:注解来给API增加方法说明。
    @ApiParam:定义在参数上
    @ApiResponses:用于表示一组响应
    @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
    l code:数字,例如400
    l message:信息,例如"请求参数没填好"
    l response:抛出异常的类

    @ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)

    l @ApiModelProperty:描述一个model的属性

    @ApiImplicitParams: 用在方法上包含一组参数说明。

    @ApiImplicitParam:用来注解来给方法入参增加说明。

    @ApiImplicitParam的参数说明:

    paramType:指定参数放在哪个地方

    header:请求参数放置于Request Header,使用@RequestHeader获取 query:请求参数放置于请求地址,使用@RequestParam获取 path:(用于restful接口)–>请求参数的获取:@PathVariable body:(不常用) form(不常用)

    name:参数名

    dataType:参数类型

    required:参数是否必须传

    true | false

    value:说明参数的意思

    defaultValue:参数的默认值

    案例:

    //实体类
    //entity的实体类中可以添加一些自定义设置
    @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;
    }
    
    
    //controler层
    @RestController
    @RequestMapping("/admin/integralGrade")
    @Api(value = "积分等级管理")
    public class IntegralGradeController {
    
        @Resource
        private IntegralGradeService integralGradeService;
    
        @GetMapping("/list")
        @ApiOperation("积分等级列表")
        public Result listAll(){
            List list = integralGradeService.list();
            return Result.ok().data("list",list);
        }
    
        @DeleteMapping("/remove/{id}")
        @ApiOperation(value = "根据id删除积分等级",notes = "逻辑删除")
        public Result removeById(
            @ApiParam(value = "数据id",required = true,example = "1")
            @PathVariable Long id){
            boolean result = integralGradeService.removeById(id);
            if (result){
                return Result.ok().message("删除成功");
            }else {
                return Result.error().message("删除失败");
            }
        }
    
        @PostMapping("/save")
        @ApiOperation(value = "新增积分等级")
        public Result save(@ApiParam(value = "积分等级对象",required = true) @RequestBody IntegralGrade integralGrade){
            boolean result = integralGradeService.save(integralGrade);
            if (result){
                return Result.ok().message("新增成功");
            }else {
                return Result.error().message("新增失败");
            }
        }
    
        @PutMapping("/updateById")
        @ApiOperation(value = "根据id修改积分等级")
        public Result updateById(@ApiParam(value = "积分等级对象",required = true) @RequestBody IntegralGrade integralGrade){
            boolean result = integralGradeService.updateById(integralGrade);
            if (result){
                return Result.ok().message("修改成功");
            }else {
                return Result.error().message("修改失败");
            }
        }
    
        @GetMapping("/getById/{id}")
        @ApiOperation(value = "根据id查询积分等级")
        public Result getById(@ApiParam(value = "数据id",required = true,example = "1") @PathVariable Long id){
            IntegralGrade result = integralGradeService.getById(id);
            if (result == null){
                return Result.error().message("查询失败");
            }else {
                return Result.ok().data("integralGrade",result);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97

    4、访问

    完成上述代码,启动Spring Boot程序,访问:http://localhost:8080/swagger-ui.html

    在这里插入图片描述

    在这里插入图片描述

    5、进行功能测试

    点击try it out 可以测试接口

    在这里插入图片描述

    有一个需要注意的地方:

    Conntroller中定义的方法必须在@RequestMapper中显示的指定RequestMethod类型,否则SawggerUi会默认为全类型皆可访问, API列表中会生成7条项目。

    6、参考

    http://blog.didispace.com/springbootswagger2/

    Swagger官网 :http://swagger.io/

    Spring Boot & Swagger UI : http://fruzenshtein.com/spring-boot-swagger-ui/

    Github:https://github.com/swagger-api/swagger-core/wiki/Annotations

  • 相关阅读:
    智能座舱供应链的“新主角”
    python:PyWebIO 模仿 mdict 查英汉词典
    安卓系统开发之systrace
    基于 Linux 的 Docker Swarm 集群部署及应用
    基于android的轻餐饮点餐APP(ssm+uinapp+Mysql)
    Effective Objective-C 学习(三)
    【Java每日一题】— —第十七题:杨辉三角(等腰三角形)。(2023.10.01)
    Solaris 9 Sparc下安装整合Apache2和Tomcat5
    剑指 Offer II 105. 岛屿的最大面积
    设计模式之观察者模式
  • 原文地址:https://blog.csdn.net/m0_67392661/article/details/126042210