Skip to content

Swagger组件

概述

为了更好的服务于项目API管理及前后端联调,框架特此引入Knife4j。 Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。

适用范围

Pangea v2.8.6+

快速集成

1、在业务模块的pom文件中添加依赖

检查所在项目的pom.xml中是否添加了pangae-common-swagger依赖,如果存在依赖则跳过此步骤,否者需要添加依赖,代码如下:

xml
<dependency>
    <groupId>com.hisense.pangea</groupId>
    <artifactId>pangea-common-swagger</artifactId>
</dependency>

2、配置参数

在项目所在的yml配置文件中配置以下参数

yaml
# swagger参数配置
pangea:
  swagger:
    #分组名称
    group-name: pangea微服务开发框架-系统服务
    #扫描路径
    base-package: com.hisense.demo.controller
    #文档标题
    title: pangea微服务开发框架-系统服务API文档
    #文档描述
    description: 此文档是系统服务下所有API接口的描述
    #系统地址
    terms-of—service-url: http://pangea.hisense.com
    #版本信息
    version: 2.0
    #作者信息
    contact:
      #作者名称
      name: 张三
      #作者邮箱
      email: zhangsan@hisense.com
      #作者主页
      url: http://www.zhangsan.com

以上参数配置为demo演示,项目组需要根据实际需求进行更改。以下为参数配置详情与示例:

中文描述示例
分组名称用于各服务之间区分或各版本之间区分pangea微服务开发框架-系统服务
swagger扫描路径要产生Api文档的路径,一般扫描项目的controller路径com.hisense.demo.controller
API文档表头用于描述文档主页的标题pangea微服务开发框架-系统服务API文档
API文档描述用于描述文档主页的描述此文档是系统服务下所有API接口的描述
地址系统的访问地址或关于文档的其他地址http://pangea.hisense.com
作者文档的生成者pangea@hisense.com
版本文档的版本维护2.0
以上参数为swagger基本参数配置,使用示例中的值产生的效果如下图,
更多参数配置框架团队正在探索中,敬请期待!

3、配置返回值统一格式白名单

将以下代码添加到项目中的application.yml文件中:

yaml
pangea:
  dispose:
    advice-filter-package:
      - springfox.documentation.swagger

至此,swagger已完成集成。 此时,我们可以启动服务,等待服务启动成功后我们可以访问swagger页面,本地访问地址为http://localhost:服务端口/doc.html, 信云部署后访问地址为前端地址/api/后端服务名/doc.html,例如,我们访问demo服务的api,访问地址应为http://pangea.test.devapps.hisense.com/api/demo/doc.html。 访问后的页面呈现效果如下:

基本使用

1、常用注解

注解作用
@Api修饰整个类,描述Controller的作用,表示该类是一个swagger资源
@ApiOperation用在请求的方法上,说明方法的用途、作用
@ApiParam作用于请求的方法上,用于单个参数的描述
@ApiResponses用在请求的方法上,表示一组响应
@ApiResponse用在@ApiResponses中,一般用于表达一个错误的响应信息
@ApiIgnore使用该注解忽略这个API
@ApiImplicitParams用在请求的方法上,表示一组参数说明
@ApiImplicitParam用在@ApiImplicitParams注解中,也可单独使用,指定一个请求参数的各个方面
@ApiModel修饰整个类,描述domain的作用,一般用于接口参数为实体对象的(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty修饰domain中的属性,描述属性的作用,一般配合@ApiModel使用

2、注解的使用

2.1 @Api

属性名称数据类型默认值说明
tagsString[]“”对Controller的分组,对Controller简要说明

示例:

java
@RestController
@RequestMapping("/demo")
@Api(tags = "测试Demo")
public class DemoController extends BaseController {
    
}

示例产生的效果如图

2.2 @ApiOperation

属性名称数据类型默认值说明
valueString接口简要说明,120字符或更少
notesString“”接口详细描述
示例:
java
@ApiOperation(value = "删除用户", notes = "用于根据ID数组批量删除用户")
@DeleteMapping("delete")
public String delete(@RequestBody List<Long> ids) {//内部实现}

示例产生的效果如图

2.3 @ApiParam

属性名称数据类型默认值说明
nameString“”参数名称
valueString“”参数简单描述
defaultValueString“”描述参数默认值
requiredbooleanfalse是否为必传参数, false:非必传; true:必传

示例:

java
public String delete(@ApiParam(value = "用户id数组", name = "ids", required = true)@RequestBody List<Long> ids) {
    //内部实现
}

示例产生的效果如图

2.4 @ApiResponses

属性名称数据类型默认值说明
valueApiResponse[]ApiResponse 列表

2.5 @ApiResponse

属性名称数据类型默认值说明
codeint响应码
messageString响应信息

示例:

java
@ApiOperation(value = "删除用户", notes = "用于根据ID数组批量删除用户")
@DeleteMapping("delete")
@ApiResponses({
        @ApiResponse(code=200,message="访问成功"),
        @ApiResponse(code=204,message="服务器成功处理请求,但不需要返回任何实体内容"),
        @ApiResponse(code=400,message="请求参数没填好"),
        @ApiResponse(code=401,message="认证错误,未检测到token或token失效"),
        @ApiResponse(code=403,message="禁止访问"),
        @ApiResponse(code=404,message="请求路径没有或页面跳转路径不对"),
        @ApiResponse(code=500,message="服务器内部错误")
})
public String delete(@ApiParam(value = "用户id数组", required = true)@RequestBody List<Long> ids) {
    //内部实现
}

示例产生的效果如图

2.6 @ApiIgnore

注解主要作用在方法上,类上,参数上。
当作用在方法上时,方法将被忽略;
作用在类上时,整个类都会被忽略;
作用在参数上时,单个具体的参数会被忽略。

2.7 @ApiImplicitParams

属性名称数据类型默认值说明
valueApiResponse[]ApiResponse列表

2.8 @ApiImplicitParams

属性名称数据类型默认值说明
nameString“”参数名称(实体类字段名称)
valueString“”参数简要说明
defaultValueString“”描述参数的默认值
requiredbooleanfalse指定是否为必填参数,false:非必传参数; true:必传参数

2.9 @ApiModel

属性名称数据类型默认值说明
valueString类名为模型提供备用名称
descriptionString“”提供详细的类描述

2.10 @ApiModelProperty

属性名称数据类型默认值说明
valueString“”属性简要说明
nameString“”运行覆盖属性的名称。重写属性名称
dataTypeString“”参数的数据类型,可以是类名或原始数据类型,此值将覆盖从类属性读取的数据类型
requiredbooleanfalse是否为必传参数,false:非必传参数; true:必传参数
positionint0允许在模型中显示排序属性
hiddenbooleanfalse隐藏模型属性,false:不隐藏; true:隐藏

更多swagger进阶使用请参考 knife4j官方文档