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,还有RAMLjsonapi,Springfox的目标同样包括支持这些格式。这就能解释那个swagger2的后缀了,这只是Springfox对Swagger的支持。

springBoot集成swagger

第一步:引入maven依赖,在你项目的pom文件中,引入下面依赖:

  1. <!--配置swagger3-->
  2. <dependency>
  3. <groupId>io.springfox</groupId>
  4. <artifactId>springfox-swagger-ui</artifactId>
  5. <version>3.0.0</version>
  6. </dependency>

第二步:添加配置,添加swagger的配置类(非必需)

  1. /**
  2. * Swagger3配置类
  3. */
  4. @Configuration
  5. public class Swagger3Config {
  6. @Bean
  7. public Docket createRestApi() {
  8. return new Docket(DocumentationType.OAS_30)
  9. .apiInfo(apiInfo())
  10. .select()
  11. .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
  12. .paths(PathSelectors.any())
  13. .build();
  14. }
  15. private ApiInfo apiInfo() {
  16. return new ApiInfoBuilder()
  17. .title("Swagger3接口文档")
  18. .description("更多请咨询服务开发者XXX")
  19. // import springfox.documentation.service.Contact
  20. .contact(new Contact("作者", "作者地址", "作者邮箱"))
  21. .version("1.0")
  22. .termsOfServiceUrl("aaa")
  23. .build();
  24. }
  25. }

第三步:在Application启动应用类上面加入@EnableOpenApi注解(实际测试非必需)

  1. @EnableOpenApi
  2. @SpringBootApplication
  3. public class AppServerApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(AppServerApplication.class, args);
  6. }
  7. }

第四步:在业务接口中添加swagger注解

  1. /**
  2. * 用户实体类信息
  3. * @author missye
  4. * @since 2020/07/21
  5. */
  6. @Data
  7. @NoArgsConstructor
  8. @AllArgsConstructor
  9. @ApiModel("用户基本信息")
  10. public class SysUser {
  11. /**
  12. * 用户名
  13. */
  14. @ApiModelProperty("用户名")
  15. private String userName;
  16. /**
  17. * 用户昵称
  18. */
  19. @ApiModelProperty("用户昵称")
  20. private String nickName;
  21. /**
  22. * 邮件
  23. */
  24. @ApiModelProperty("邮件")
  25. private String email;
  26. /**
  27. * 手机号
  28. */
  29. @ApiModelProperty("手机号")
  30. private String mobile;
  31. }
  32. @Api(value = "用户管理接口",tags = "用户信息接口类")
  33. @RestController
  34. @RequestMapping("sysUser")
  35. public class SysUserController {
  36. @Autowired
  37. private SysUserService sysUserService;
  38. /**
  39. * 查询
  40. * @return
  41. */
  42. @ApiOperation("查询用户列表")
  43. @GetMapping("/findUserList")
  44. public List<SysUser> selectUserList(){
  45. List<SysUser> userList = sysUserService.selectUserList();
  46. return userList;
  47. }
  48. /**
  49. * 分页查询
  50. * @param pageNum 当前页数
  51. * @param pageSize 每页的记录条数
  52. * @return
  53. */
  54. @ApiOperation("分页查询用户列表")
  55. @GetMapping("/findUserListByPage")
  56. public PageInfo<SysUser> getUserBySearch(
  57. @RequestParam("pageNum") int pageNum,
  58. @RequestParam("pageSize") int pageSize) {
  59. // TODO Auto-generated method stub
  60. PageHelper.startPage(pageNum,pageSize);
  61. List<SysUser> list= sysUserService.selectUserList();
  62. PageInfo<SysUser> pageInfo = new PageInfo(list);
  63. pageInfo.toString();
  64. return pageInfo;
  65. }
  66. @GetMapping("/hello")
  67. @ApiOperation(value = "返回请求信息", notes = "根据请求参数,返回请求信息")
  68. @ApiImplicitParam(name = "name", value = "名字", defaultValue = "swagger")
  69. public String hello(@RequestParam(value = "name", defaultValue = "swagger") String name) {
  70. return "hello:" + name + "!";
  71. }
  72. }

启动项目,访问swaggerui界面,注意,swagger3更新后,可访问ui界面路径与之前不同;

ip:port/context-path/swagger-ui/index.html

常用的swagger注解

  1. @Api:用在请求的类上,表示对类的说明
  2. tags="说明该类的作用,可以在UI界面上看到的注解"
  3. value="该参数没什么意义,在UI界面上也看到,所以不需要配置"
  4. @ApiOperation:用在请求的方法上,说明方法的用途、作用
  5. value="说明方法的用途、作用"
  6. notes="方法的备注说明"
  7. @ApiImplicitParams:用在请求的方法上,表示一组参数说明
  8. @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
  9. name:参数名
  10. value:参数的汉字说明、解释
  11. required:参数是否必须传
  12. paramType:参数放在哪个地方
  13. · header --> 请求参数的获取:@RequestHeader
  14. · query --> 请求参数的获取:@RequestParam
  15. · path(用于restful接口)--> 请求参数的获取:@PathVariable
  16. · body(不常用)
  17. · form(不常用)
  18. dataType:参数类型,默认String,其它值dataType="Integer"
  19. defaultValue:参数的默认值
  20. @ApiResponses:用在请求的方法上,表示一组响应
  21. @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
  22. code:数字,例如400
  23. message:信息,例如"请求参数没填好"
  24. response:抛出异常的类
  25. @ApiModel:用于响应类上,表示一个返回响应数据的信息
  26. (这种一般用在post创建的时候,使用@RequestBody这样的场景,
  27. 请求参数无法使用@ApiImplicitParam注解进行描述的时候)
  28. @ApiModelProperty:用在属性上,描述响应类的属性