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
展现效果:


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM