官网:https://swagger.io/
Swagger 是一个规范和完整的Web API框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
功能主要包含以下几点:
A. 使得前后端分离开发更加方便,有利于团队协作;
B. 接口文档在线自动生成,降低后端开发人员编写接口文档的负担;
C. 接口功能测试;
使用Swagger只需要按照它的规范去定义接口及接口相关的信息,再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,以及在线接口调试页面等等;
在工程引入依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
可以直接添加version,或者和我一下在parent工程中集中管理依赖版本
在工程config包定义swagger配置类
package com.itheima.stock.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author : Hasity
* @date : 2022/12/15 11:27
* @description : 定义swagger配置类
*/
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
@Bean
public Docket buildDocket() {
//构建在线API概要对象
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(buildApiInfo())
.select()
// 要扫描的API(Controller)基础包
.apis(RequestHandlerSelectors.basePackage("需要填自己项目control包路径"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo buildApiInfo() {
//网站联系方式
Contact contact = new Contact("程序员Hasity","https://www.csdn.net/?spm=1011.2266.3001.4476","ac0x3f@163.com");
return new ApiInfoBuilder()
.title("接口API文档")//文档标题
.description("这是一个方便前后端开发人员快速了解开发接口需求的在线接口API文档")//文档描述信息
.contact(contact)//站点联系人相关信息
.version("1.0.0")//文档版本
.build();
}
}
在stock_backend工程导入配置类:
@SpringBootApplication
@MapperScan("com.hasity.stock.mapper")
public class StockApp {
public static void main(String[] args) {
SpringApplication.run(StockApp.class, args);
}
}
swagger相关注解介绍
注解 | 位置 | 说明 |
---|---|---|
@Api | 类 | 加载Controller类上,表示对类的说明 |
@ApiModel | 类(通常是实体类) | 描述实体类的作用,通常表示接口接收参数的实体对象 |
@ApiModelProperty | 属性 | 描述实体类的属性,(用对象接收参数时,描述对象的一个字段) |
@ApiOperation | 方法 | 说明方法的用途、作用 |
@ApiImplicitParams | 方法 | 表示一组参数说明 |
@ApiImplicitParam | 方法 | 用在@ApiImplicitParams注解中,指定一个请求参数的各个方面的属性 |
@ApiParam | 方法入参或者方法之上 | 单个参数的描述信息,描述form表单、url参数 |
@ApiImplicitParam注解详解:
属性 | 取值 | 作用 |
---|---|---|
paramType | 查询参数类型 | |
path | 以地址的形式(rest风格)提交数据 | |
query | 直接跟参数完成自动映射赋值(/add/user?name=zhangsan) | |
body | 以流的形式提交 仅支持POST | |
header | 参数在request headers 里边提交 | |
form | 以form表单的形式提交 仅支持POST | |
dataType | 参数的数据类型 只作为标志说明,并没有实际验证 | |
Long | ||
String | ||
name | 接收参数名(方法入参的名称) | |
value | 接收参数的意义描述(描述信息) | |
required | 参数是否必填 | |
true | 必填 | |
false | 非必填 | |
defaultValue | 默认值 |
其它注解:
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用该注解忽略这个API
@ApiError :发生错误返回的信息
@RestController
@RequestMapping("/api")
@Api(value = "用户认证相关接口定义",tags = "用户功能-用户登录功能")
public class UserController {
/**
* 注入用户服务bean
*/
@Autowired
private UserService userService;
/**
* 根据用户名查询用户信息
* @param userName
* @return
*/
@GetMapping("/{userName}")
@ApiOperation(value = "根据用户名查询用户信息",notes = "用户信息查询",response = SysUser.class)
@ApiImplicitParam(paramType = "path",name = "userName",value = "用户名",required = true)
public SysUser getUserByUserName(@PathVariable("userName") String userName){
return userService.getUserByUserName(userName);
}
/**
* 用户登录功能接口
* @param vo
* @return
*/
@PostMapping("/login")
@ApiOperation(value = "用户登录功能",notes = "用户登录",response = R.class)
public R<LoginRespVo> login(@RequestBody LoginReqVo vo){
return userService.login(vo);
}
/**
* 生成登录校验码的访问接口
* @return
*/
@GetMapping("/captcha")
@ApiOperation(value = "验证码生成功能",response = R.class)
public R<Map> getCaptchaCode(){
return userService.getCaptchaCode();
}
}
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!
gitee地址:https://gitee.com/xiaoym/knife4j
官方文档:https://doc.xiaominfo.com/
效果演示:http://knife4j.xiaominfo.com/doc.html
核心功能
该UI增强包主要包括两大核心功能:文档说明 和 在线调试
1)快速集成knife4j
在stock_common工程添加依赖:
<!--knife4j的依赖-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
<!--支持接口参数校验处理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<knif4j.version>2.0.2</knif4j.version> knif4j版本
在swagger配置类添加knife4j配置:
@Configuration
@EnableSwagger2
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
//.....其它不变......
}
以上有两个注解需要特别说明,如下表:
注解 | 说明 |
---|---|
@EnableSwagger2 | 该注解是Springfox-swagger框架提供的使用Swagger注解,该注解必须加 |
@EnableKnife4j | 该注解是knife4j 提供的增强注解,Ui提供了例如动态参数、参数过滤、接口排序等增强功能,如果你想使用这些增强功能就必须加该注解,否则可以不用加 |
2)访问在线文档资源:http://localhost:8091/doc.html