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配置类*/@Configurationpublic class Swagger3Config {@Beanpublic 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@SpringBootApplicationpublic 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 {@Autowiredprivate 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 stubPageHelper.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:数字,例如400message:信息,例如"请求参数没填好"response:抛出异常的类@ApiModel:用于响应类上,表示一个返回响应数据的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)@ApiModelProperty:用在属性上,描述响应类的属性
