• SpringBoot整合swagger2框架


    一、Swagger2介绍

    Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
    Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。
    Swagger的优势:
    1、支持API自动生成同步文档,使用Swagger之后可以直接通过代码以及简单的配置来自动生成文档。
    2、提供web页面的在线测试API,可以不需要postman等工具进行接口测试,在线测试参数与格式都确定了,直接在web界面进行参数设置就可以测试接口啦。

    二、SpringBoot集成Swagger2

    1、添加Swagger2依赖

    1)UI原生版本

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <!--UI原生版本-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    

    2)UI增强版本

    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>knife4j-spring-boot-starter</artifactId>
        <!--在引用时请在maven中央仓库搜索最新版本号-->
        <version>2.0.3</version>
    </dependency>
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>swagger-bootstrap-ui</artifactId>
        <version>1.9.6</version>
    </dependency>
    

    2、创建Swagger2配置文件

    @Configuration
    @EnableSwagger2
    @EnableKnife4j//UI增强注解
    public class Swagger2Config {
        @Bean
        public Docket buildDocket(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(buildApiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.dragonsoft.dataManage.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
        private ApiInfo buildApiInfo(){
            return new ApiInfoBuilder()
                    //页面标题,导入postman时必须有该项配置
                    .title("模拟创建仿真数据")
                    //版本号,导入postman时必须有该项配置
                    .version("1.0")
                    .description("视频大数据平台基线V1.1-区域分析-业务数据构造")
                    //创建人
                     .contact(new Contact("jiangmy","http://localhost:9999/swagger-ui.html","jiangmy@dragoninfo.com.cn"))
                    .build();
        }
    }
    
    

    3、修改Controller,添加API注解

    @RestController
    @RequestMapping(value = "/ryxx")
    @Api(description = "人员基础信息")
    public class PeopleApiController {
        @ResponseBody
        @GetMapping(value = "/ryjcxx", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
        @ApiOperation(value = "人员基础信息",notes = "人员基础信息生成")
        public Map<String,Object> ryjcxx() {
            Map<String,Object> returnResult = null;
            try {
                returnResult = CzrkComponet.ryJcxx();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return returnResult;
        }
    

    1、注解说明

    @Api注解可以用来标记当前Controller的功能。

    (1)tags="说明该类的作用,可以在UI界面上看到的注解" (非空时将覆盖value的值)

    (2)value="说明类的作用"

    (3)description="说明类的作用,对类的作用进行描述"

    @Api(tags = {"教师管理", "教学管理"},description = "轨迹数据构造-人")
    

    @ApiOperation注解用来标记一个方法的作用。

    (1)value="说明该方法的作用和用途"

    (2)notes="对该方法的备注信息说明"

    
    @ApiOperation(value = "人脸轨迹和识别结果进出一组数据生成",notes = "根据指定区域、时间、人员,生成进出一组的人脸轨迹(collect_face_info)2条和识别结果数据(engs_comp_clg_result)2条")
    

    @ApiImplicitParam注解用来描述一个参数,可以配置参数的中文含义,也可以给参数设置默认值,这样在接口测试的时候可以避免手动输入。

    如果有多个参数,则需要使用多个@ApiImplicitParam注解来描述,多个@ApiImplicitParam注解需要放在一个@ApiImplicitParams注解中。
    需要注意的是,@ApiImplicitParam注解中虽然可以指定参数是必填的,但是却不能代替@RequestParam(required = true),前者的必填只是在Swagger2框架内必填,抛弃了Swagger2,这个限制就没用了,所以假如开发者需要指定一个参数必填,@RequestParam(required = true)注解还是不能省略。
    (1)name参数名
    (2)value对参数的说明
    (3)required参数是否必传(值为true或者false)
    (4)dataType参数类型,默认是String,其他例如:Integer
    (5)paramType 参数放在什么地方
    · header --> 请求参数的获取:@RequestHeader ·
    query --> 请求参数的获取:@RequestParam ·
    path(用于restful接口)--> 请求参数的获取:@PathVariable ·
    body(不常用) ·
    form(不常用)

    @ApiImplicitParams({
            @ApiImplicitParam(name = "areaName", value = "有效区域名称(t_area.name),1)区域有效且启用即t_area.is_delete = '0' and on_off = '0';2)区域内有已授权的人像抓拍用途的进出标识摄像头即baz_ape_purpose.purpose='2' and is_authorized='t' and aisle_mark in ('1','-1');3) 摄像机设备有效即baz_ape.deleted = '0' and state_ = '1'",defaultValue = "jmy区域", paramType = "query", dataType = "string", required = true),
            @ApiImplicitParam(name = "pid", value = "有效人员id(baz_person.pid),即baz_person表中deleted = 'f'",defaultValue = "8ad0eeec8e3f50e9518ba0a9592bb8c2", paramType = "query", dataType = "string", required = true),
            @ApiImplicitParam(name = "collectTime", value = "采集时间起始值,若多条记录则会自动加1天,格式:2020-02-01 08:00:00,注意:该时间加上record的天数,不可超出系统当前时间,以免造成时间不合理",defaultValue = "2020-02-01 08:00:00", paramType = "query", dataType = "string", required = true),
            @ApiImplicitParam(name = "record", value = "进入区域次数,单次进出算1次", defaultValue = "1", paramType = "query", dataType = "int", required = true),
            @ApiImplicitParam(name = "hour", value = "单次进出停留时长,注意:进出时长需不超过23:59:59-采集时间点之间的时长取整(例:采集时间点08:00:00,则进出时长不超过23:59:59-08:00:00即15小时)", defaultValue = "12", paramType = "query", dataType = "int", required = true),
            @ApiImplicitParam(name = "faceImgUrl", value = "抓拍图片URL,未填写时默认取pid的主图URL即baz_person_img_source.img_url且is_master = 't'且deleted = 'f',填写时则按填写设置", defaultValue = "", paramType = "query", dataType = "string", required = false),
            @ApiImplicitParam(name = "sceneImgUrl", value = "全景图片URL,未填写时默认取pid的主图URL即baz_person_img_source.img_url且is_master = 't'且deleted = 'f',填写时则按填写设置", defaultValue = "", paramType = "query", dataType = "string", required = false)
    })
    

    @ApiResponses:用在请求的方法上,表示一组响应

    @ApiResponse用在@ApiResponses中,常用于表示一组错误的信息的响应
    

    (1)code错误代码
    (2)massege错误信息提示
    (3)response 抛出异常的类
    示例:
    @ApiResponses({
    @ApiResponse(code=400,message="请求参数没填好"),
    @ApiResponse(code=404,message="请求路径没有或页面跳转路径不对")
    })

    @ApiParam用在请求方法中,描述参数的信息

    name参数名称,参数名称可以覆盖方法参数名称,路径参数必须与方法参数一致
    value参数的简要说明。
    defaultValue参数默认值
    required 属性是否必填,默认为false [路径参数必须填]

    @ApiParam(name = "areaName", required = true) String areaName,
    

    @ApiModelProperty作为字段的描述

    实体类使用

    @Entity
    @Data
    @ApiModel(value = "常口")
    @Table(name = "T_GA_ZA_RKXXGLXT_CZRK", schema = "CSBSYS", catalog = "")
    public class T_GTGaZaRkxxglxtCzrk {
        @ApiModelProperty(value = "人员id",required = true)
        private String rid;
    

    @ApiIgnore() 用在类或者方法上,表明在swagger2中忽略这个类或者方法或者参数。

    不想接口在页面上显示可以使用@ApiIgnore()注解

    2、Swagger界面排序

    参考链接:https://blog.csdn.net/suifeng629/article/details/106214262
    1、模块的排序,使用tag名称排序,在名称前加上前缀0X-,即在名称就加上"01-"、"02-"。但为了页面展示效果,在排序后把前缀进行处理;

    @RequestMapping(value = "/people")
    @Api(tags = "01-对象-人")
    

    2、接口排序在路径名前加前缀0X-,即在名称就加上"01-"、"02-"。

    @GetMapping(value = "/01jcxx", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    

    3、swagger文档转成word 文档

    参考链接:https://www.cnblogs.com/jmcui/p/8298823.html

    4、swagger访问URL

    1、原生版本

    http://${host}{port}/swagger-ui.html

    2、UI增强版本

    http://${host}{port}/doc.html
    展现效果:

  • 相关阅读:
    Vue.js之Vue计算属性、侦听器、样式绑定
    Vue之初识Vue
    JS对象与Dom对象与jQuery对象之间的区别
    JavaScript之JS的数据类型
    JS中toString()、toLocaleString()、valueOf()的区别
    【开源】基于 Flink 1.10.1 的 SQL 提交程序
    Flink 1.10 UDF 的一个小问题
    Flink 1.10 SQL 写 Hbase 数据无法写入hbase问题
    Flink SQL 双流 join demo
    Flink SQL 解析复杂(嵌套)JSON
  • 原文地址:https://www.cnblogs.com/seamy/p/15654571.html
Copyright © 2020-2023  润新知