Spring boot 接入swagger以及使用

ByteRover
• 阅读 6765

Springboot 集成Swagger 2(springfox)

1、集成

导入依赖

Springfox Swagger2:

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>3.0.0</version>
</dependency>

Springfox Swagger UI:

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>3.0.0</version>
</dependency>

配置swagger

@Configuration
@EnableSwagger2
public class SwaggerConfig{}

创建一个以上一个类配置swagger即可。

默认效果

访问界面:IP:port/swagger-ui.html

Spring boot 接入swagger以及使用

2、配置

在以上配置类中添加方法:

//配置swagger的Docket的Bean实例
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2).apiInfo(this.apiInfo());
}

//自定义swagger信息
private ApiInfo apiInfo(){
    Contact contact = new Contact("name","url","email");
    return new ApiInfo("title","description","version","termsOfServiceUrl",contact,"license",licenseUrl,new ArrayList());
}

3、配置扫描接口

项目中并不需要swagger将整个项目的所有类暴露出去,通过以上配置的Bean实例,设置swagger关注并显示的接口,以及是否开启使用:

return new Docket(DocumentationType.SWAGGER_2)
    .apiInfo(apiInfo())
    .enable(false)//false时,浏览器不能访问,默认为true
    .select()
    //RequestHandlerSelect,配置要扫描接口的方式
    //basePackage("包路径"):指定要扫描的包
    //any():全部扫描
    //none():不扫描
    //withClassAnnotation():扫描类上有指定的类注解的类,参数是一个类注解,如"RestContrller.class"
    //withMethodAnnotation():扫描方法上有指定的注解的方法,参数如"GetMapping.class"
    .api(RequestHandlerSelectors.basePackage("com.noel.swagger.controller"))
    //paths():过滤某些路径,参数为正则匹配参数
    .paths(PathSelectors.ant("/omit/**"))
    .build();

只希望在开发环境中使用swagger,但是生产环境不使用:

@Bean
public Docket docket(Environment environment){
    //dev: application-dev.yml or application-anotherEnv.yml 或者类似的properties配置文件
    //如果允许时加载了指定的环境,则返回true
    Profiles profiles = Profiles.of("dev","anotherEnv");
    Boolean isSwaggerOn = environment.acceptsProfiles(profiles);
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(this.apiInfo())
        .enable(isSwaggerOn);
}

配置API文档分组:

.group("groupName")

配置多个分组:

@Bean
public Docket docketGroupA(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docketGroupB(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
@Bean
public Docket docketGroupB(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}

在配置类中,一个Docket Bean实例,对应一个swagger分组。

4、常用注解

4.1、接口类的注解

注解名称说明
@Api(tags="模块说明")作用在API接口类Controller上,说明该类的用途
@ApiOperation("APPI接口说明")在API接口方法上进行说明
@ApiImplicitParams接口的参数说明,用于对多个参数进行说明
@ApiImplicitParam("参数说明")给接口参数添加说明,用于对单个参数进行说明
@ApiResponses; @ApiResponse方法返回值的说明,@ApiResponses对多个返回值说明

4.1.1、接口类的使用

@Api:放在 请求的类上,与 @Controller 并列,说明类的作用,如用户模块,订单类等。

@Api的属性

属性名称说明
valuecontroller若指定了RequestMapping 访问地址,把路径赋值给value
tags添加标签
description描述
basePath基本路径,基本上很少用
positionswagger-ui中的显示顺序
produces指明生成json、xml等格式,值为“application/json”
consumes使用json或者xml,同上
protocols协议类型,如: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true ,将在文档中隐藏

示例:

@Api(value="/test", tags="测试接口")
@Controller
@RequestMapping("/test")
public class TestController{}

4.1.2、接口方法使用的注解说明

@ApiOperation:"用在请求的方法上,说明方法的作用"
@ApiImplicitParams:用在请求的方法上,包含一组参数说明
@ApiImplicitParam:对单个参数的说明
name:参数名
value:参数的说明、描述
required:参数是否必须必填
paramType:参数放在哪个地方
query --> 请求参数的获取:@RequestParam
header --> 请求参数的获取:@RequestHeader
path(用于restful接口)--> 请求参数的获取:@PathVariable
body(请求体)--> @RequestBody User user
form(普通表单提交)
dataType:参数类型,默认String,其它值dataType="int"
defaultValue:参数的默认值
@ApiResponses:方法返回对象的说明
@ApiResponse:每个参数的说明
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类

示例:

@ApiOperation(value="登录",notes="这是一个登录接口的说明")
@ApiImplicitParams({
    @ApiImplicitParam(name="name",value="姓名",required=true,paramType="form",dataType="String"),
    @ApiImplicitParam(name="age",value="年龄",required=true,paramType="form",dataType="int")
})
@ApiResponses({
    @ApiResponse(code = 200, message = "请求成功"),
    @ApiResponse(code = 400, message = "请求参数没填好"),
    @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不存在")
}) 
@ResponseBody
@PostMapping("/login")
public JsonResult login(@RequestParam String name, @RequestParam Integer age){
    //...
    return JsonResult.ok(map);
}

4.2、实体类的注解

注解名称说明
@ApiModel("POJO说明")给模型类JAVABEAN等添加说明
@ApiModelProperty("POJO模型类属性说明")给类属性添加说明
@ApiModel的用途有2个:
当请求数据描述,即 @RequestBody 时, 用于封装请求(包括数据的各种校验)数据;
当响应值是对象时,即 @ResponseBody 时,用于返回值对象的描述

@ApiModel的属性:

注解名称默认值说明
value类名提供中文说明
description""描述
parentVoid.class为模型提供父类,用来描述继承关系
discriminatory""支持模型继承和多态,使用鉴别器的字段的名称,可以断言需要使用哪个子类型
subTypes[{},...]继承此类的子类数组
reference""指定对应类型定义的引用,覆盖指定的任何其他元数据

@ApiModelProperty的属性说明:

注解名称默认值说明
value""属性简要说明
name""运行覆盖属性的名称。重写属性名称
allowableValues""限制参数可接收的值,固定取值,固定范围
access""过滤属性,参阅:io.swagger.core.filter.SwaggerSpecFilter
notes""备注
dataType""参数的数据类型,可以是类名或原始数据类型,此值将覆盖从类属性读取的数据类型
requiredfalse是否为必传参数,false:非必传参数; true:必传参数
position0允许在模型中显示排序属性
hiddenfalse隐藏模型属性,false:不隐藏; true:隐藏
example""属性的示例值
readOnlyfalse指定模型属性为只读,false:非只读; true:只读
reference""指定对应类型定义的引用,覆盖指定的任何其他元数据
allowEmptyValuefalse允许传空值,false:不允许传空值; true:允许传空值

示例:

@ApiModel("用户")
Public class User{
    
    @ApiModelProperty("年龄")
    public Integer age;
    
    @ApiModelProperty(value="姓名", required=true)
    public String name;
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis
springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatisplus无法正常使用问题参考文章:(1)springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatisplus无法正常使用问题(https://www.oschina.net/action/Go
Stella981 Stella981
3年前
IDEA Spring使用Swagger2 API接口
根据Swagger2可以快速帮助我们编写最新的API接口文档,再也不用担心开会前仍忙于整理各种资料了,间接提升了团队开发的沟通效率。1\.引入依赖<!Swagger2api接口插件<dependency<groupIdio.springfox</groupId
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(