z1.在pom.xml文件插入依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
2.新建config包,在config包里新建SwaggerConfig.java文件和SwaggerProperties.java文件
SwaggerConfig.java
package com.example.config;
import lombok.Data;
import org.springframework.boot.SpringBootVersion;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.*;
/**
* <p>
* swagger配置
* </p>
*
* @author Qin xiaotian
* @since 2021-07-27
*/
@Component
@ConfigurationProperties("swagger")
@Data
public class SwaggerConfig {
private final SwaggerProperties swaggerProperties;
public SwaggerConfig(SwaggerProperties swaggerProperties) {
this.swaggerProperties = swaggerProperties;
}
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30).pathMapping("/")
// 定义是否开启swagger,false为关闭,可以通过变量控制
.enable(swaggerProperties.getEnable())
// 将api的元信息设置为包含在json ResourceListing响应中。
.apiInfo(apiInfo())
// 接口调试地址
.host(swaggerProperties.getTryHost())
// 选择哪些接口作为swagger的doc发布
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
// 支持的通讯协议集合
.protocols(newHashSet("https", "http"));
}
/**
* API 页面上半部分展示信息
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title(swaggerProperties.getApplicationName() + " Api Doc")
.description(swaggerProperties.getApplicationDescription())
.version("Application Version: " + swaggerProperties.getApplicationVersion() + ", Spring Boot Version: " + SpringBootVersion.getVersion())
.build();
}
@SafeVarargs
private final <T> Set<T> newHashSet(T... ts) {
if (ts.length > 0) {
return new LinkedHashSet<>(Arrays.asList(ts));
}
return null;
}
}
SwaggerProperties.java
package com.example.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* <p>
* 类描述
* </p>
*
* @author Qin xiaotian
* @since 2021-07-27
*/
@Component
@ConfigurationProperties("swagger")
@Data
public class SwaggerProperties {
/**
* 是否开启swagger,生产环境一般关闭,所以这里定义一个变量
*/
private Boolean enable;
/**
* 项目应用名
*/
private String applicationName;
/**
* 项目版本信息
*/
private String applicationVersion;
/**
* 项目描述信息
*/
private String applicationDescription;
/**
* 接口调试地址
*/
private String tryHost;
}
3.在启动类头加入以下注解
@SpringBootApplication(scanBasePackages = {"com.example"})
意思是扫描com.example包下所有的类
4.在application.properties文件中加入以下内容
swagger.enable=true
swagger.applicationName=springfox swagger
swagger.applicationVersion=1.0
swagger.applicationDescription=springfox swagger
swagger.tryHost=http://localhost:${server.port}
5.在controller接口类中,加入注解
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
/**
* <p>
*
* </p>
*
* @author Qin xiaotian
* @since 2021-7-27
*/
@Api(tags = "测试模块")
@RestController
@RequestMapping("/test")
public class testController {
@ApiOperation("测试信息")
@PostMapping("/info")
public String getOne(@RequestParam(value = "info", required = false) String info) {
return info ;
}
}
6.启动springBoot项目,则SwaggerUI就启动了,在地址栏输入地址
http://127.0.0.1:8080/swagger-ui/index.html
出现以下页面
最后附上swagger常用的注解
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiModelProperty:用对象接收参数时,描述对象的一个字段
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用 该注解忽略这个API
@ApiError :发生错误返回的信息
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数
@ApiImplicitParam属性:
paramType 查询参数类型
path 以地址的形式提交数据
query 直接跟参数完成自动映射赋值
body 以流的形式提交 仅支持POST
header 参数在request headers 里边提交
form 以form表单的形式提交 仅支持POST
dataType 参数的数据类型 只作为标志说明,并没有实际验证 Long String
name 接收参数名
value 接收参数的意义描述
required 参数是否必填 true 必填 false 非必填
defaultValue 默认值