SpringFox介绍
SpringFox 是一个开源的API Doc的框架, 它的前身是swagger-springmvc,可以将我们的Controller中的方法以文档的形式展现。 官方定义为: Automated JSON API documentation for API’s built with Spring。
Swagger介绍
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。
SpringFox与Swagger
Swagger 是一种规范。
springfox-swagger 是基于 Spring 生态系统的该规范的实现。
springfox-swagger-ui 是对 swagger-ui 的封装,使得其可以使用 Spring 的服务。
Springfox其实是一个通过扫描代码提取代码中的信息,生成API文档的工具
。API文档的格式不止Swagger的OpenAPI Specification
,还有RAML
,jsonapi
,Springfox的目标同样包括支持这些格式。这就能解释那个swagger2的后缀了,这只是Springfox对Swagger的支持。
springBoot集成swagger
第一步:引入maven依赖,在你项目的pom文件中,引入下面依赖:
<!--配置swagger3-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
第二步:添加配置,添加swagger的配置类(非必需)
/**
* Swagger3配置类
*/
@Configuration
public class Swagger3Config {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Swagger3接口文档")
.description("更多请咨询服务开发者XXX")
// import springfox.documentation.service.Contact
.contact(new Contact("作者", "作者地址", "作者邮箱"))
.version("1.0")
.termsOfServiceUrl("aaa")
.build();
}
}
第三步:在Application启动应用类上面加入@EnableOpenApi注解(实际测试非必需)
@EnableOpenApi
@SpringBootApplication
public class AppServerApplication {
public static void main(String[] args) {
SpringApplication.run(AppServerApplication.class, args);
}
}
第四步:在业务接口中添加swagger注解
/**
* 用户实体类信息
* @author missye
* @since 2020/07/21
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("用户基本信息")
public class SysUser {
/**
* 用户名
*/
@ApiModelProperty("用户名")
private String userName;
/**
* 用户昵称
*/
@ApiModelProperty("用户昵称")
private String nickName;
/**
* 邮件
*/
@ApiModelProperty("邮件")
private String email;
/**
* 手机号
*/
@ApiModelProperty("手机号")
private String mobile;
}
@Api(value = "用户管理接口",tags = "用户信息接口类")
@RestController
@RequestMapping("sysUser")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
/**
* 查询
* @return
*/
@ApiOperation("查询用户列表")
@GetMapping("/findUserList")
public List<SysUser> selectUserList(){
List<SysUser> userList = sysUserService.selectUserList();
return userList;
}
/**
* 分页查询
* @param pageNum 当前页数
* @param pageSize 每页的记录条数
* @return
*/
@ApiOperation("分页查询用户列表")
@GetMapping("/findUserListByPage")
public PageInfo<SysUser> getUserBySearch(
@RequestParam("pageNum") int pageNum,
@RequestParam("pageSize") int pageSize) {
// TODO Auto-generated method stub
PageHelper.startPage(pageNum,pageSize);
List<SysUser> list= sysUserService.selectUserList();
PageInfo<SysUser> pageInfo = new PageInfo(list);
pageInfo.toString();
return pageInfo;
}
@GetMapping("/hello")
@ApiOperation(value = "返回请求信息", notes = "根据请求参数,返回请求信息")
@ApiImplicitParam(name = "name", value = "名字", defaultValue = "swagger")
public String hello(@RequestParam(value = "name", defaultValue = "swagger") String name) {
return "hello:" + name + "!";
}
}
启动项目,访问swaggerui界面,注意,swagger3更新后,可访问ui界面路径与之前不同;
ip:port/context-path/swagger-ui/index.html
常用的swagger注解
@Api:用在请求的类上,表示对类的说明
tags="说明该类的作用,可以在UI界面上看到的注解"
value="该参数没什么意义,在UI界面上也看到,所以不需要配置"
@ApiOperation:用在请求的方法上,说明方法的用途、作用
value="说明方法的用途、作用"
notes="方法的备注说明"
@ApiImplicitParams:用在请求的方法上,表示一组参数说明
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header --> 请求参数的获取:@RequestHeader
· query --> 请求参数的获取:@RequestParam
· path(用于restful接口)--> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType="Integer"
defaultValue:参数的默认值
@ApiResponses:用在请求的方法上,表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类
@ApiModel:用于响应类上,表示一个返回响应数据的信息
(这种一般用在post创建的时候,使用@RequestBody这样的场景,
请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:用在属性上,描述响应类的属性