首先,我们在 pom.xml 文件里添加一个依赖

    1. <dependency>
    2. <groupId>com.github.xiaoymin</groupId>
    3. <artifactId>knife4j-spring-boot-starter</artifactId>
    4. <version>2.0.7</version>
    5. </dependency>

    然后再建个包,用于防止 swagger 的配置类,如 conf,然后再建一个类,是我们用于配置 swagger 的类。

    对以下的代码的备注: initCreateDocket 方法是创建一个接口分组的方法,有时候我们写接口会分为 app 的接口,后台管理的接口等,根据端进行分一下组,不然不同的前端看的是同一套接口就比较乱,我们可以将里面的接口作者等信息稍作修改一下。 createApiAdmin 方法就是创建后台管理的接口,接口前缀是 /xican/admin/ 的就会被划分到这个分组,其他几个方法也是类似的哈。

    1. @Configuration
    2. @EnableSwagger2WebMvc
    3. @Profile(value = {"test", "online", "local", "gs"})
    4. public class SwaggerConf {
    5. /**
    6. * 初始化创建 docket
    7. *
    8. * @param controllerPathPattern 控制器通配符拦截,表示显示哪些控制器
    9. * @param groupName 组名
    10. * @return springfox.documentation.spring.web.plugins.Docket
    11. * @author chenlijia
    12. * @since 下午 12:56 2019/8/5 0005
    13. **/
    14. private Docket initCreateDocket(String controllerPathPattern, String groupName) {
    15. ParameterBuilder builder = new ParameterBuilder();
    16. builder.name(Constants.TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
    17. ArrayList<Parameter> parameters = Lists.newArrayList();
    18. parameters.add(builder.build());
    19. ApiInfo apiInfo = new ApiInfoBuilder().title("喜餐订货管理系统API文档").
    20. contact(new Contact("陈礼佳", "http://192.168.1.43:8090/toutoumai", "571740367@qq.com")).
    21. version("1.0").description("喜餐订货管理系统接口").build();
    22. ApiSelectorBuilder apis = new Docket(DocumentationType.SWAGGER_2).
    23. apiInfo(apiInfo).select().apis(RequestHandlerSelectors.any());
    24. if (StringUtils.hasText(controllerPathPattern)) {
    25. apis.paths(PathSelectors.ant(controllerPathPattern));
    26. } else {
    27. apis.paths(PathSelectors.any());
    28. }
    29. Docket docket = apis.build();
    30. if (StringUtils.hasText(groupName)) {
    31. docket.groupName(groupName);
    32. }
    33. //header
    34. docket.globalOperationParameters(parameters);
    35. return docket;
    36. }
    37. /**
    38. * 注入swagger配置
    39. *
    40. * @return
    41. */
    42. @Bean
    43. public Docket createApiAdmin() {
    44. Docket docket = initCreateDocket("/xican/admin/**", "后台接口");
    45. docket.useDefaultResponseMessages(false);
    46. createResponseMessage(docket);
    47. return docket;
    48. }
    49. /**
    50. * 注入swagger配置
    51. *
    52. * @return
    53. */
    54. @Bean
    55. public Docket createApiSupplierAdmin() {
    56. Docket docket = initCreateDocket("/xican/supplier/admin/**", "供应商后台接口");
    57. docket.useDefaultResponseMessages(false);
    58. createResponseMessage(docket);
    59. return docket;
    60. }
    61. /**
    62. * 注入swagger配置
    63. *
    64. * @return
    65. */
    66. @Bean
    67. public Docket createApiFoodManagerAdmin() {
    68. Docket docket = initCreateDocket("/xican/food/manager/**", "餐饮后台接口");
    69. docket.useDefaultResponseMessages(false);
    70. createResponseMessage(docket);
    71. return docket;
    72. }
    73. /**
    74. * 注入swagger配置
    75. *
    76. * @return
    77. */
    78. @Bean
    79. public Docket createApiSupplierApp() {
    80. Docket docket = initCreateDocket("/xican/supplier/app/**", "供应商小程序接口");
    81. docket.useDefaultResponseMessages(false);
    82. createResponseMessage(docket);
    83. return docket;
    84. }
    85. /**
    86. * 注入swagger配置
    87. *
    88. * @return
    89. */
    90. @Bean
    91. public Docket createApiCanteen() {
    92. Docket docket = initCreateDocket("/xican/canteen/**", "食堂接口");
    93. docket.useDefaultResponseMessages(false);
    94. createResponseMessage(docket);
    95. return docket;
    96. }
    97. /**
    98. * 注入swagger配置
    99. *
    100. * @return
    101. */
    102. @Bean
    103. public Docket createApiSystem() {
    104. Docket docket = initCreateDocket("/xican/system/**", "系统接口");
    105. docket.useDefaultResponseMessages(false);
    106. createResponseMessage(docket);
    107. return docket;
    108. }
    109. /**
    110. * 注入swagger配置
    111. *
    112. * @return
    113. */
    114. @Bean
    115. public Docket createApiRPC() {
    116. Docket docket = initCreateDocket("/xican/rpc/**", "远程调用接口");
    117. docket.useDefaultResponseMessages(false);
    118. createResponseMessage(docket);
    119. return docket;
    120. }
    121. /**
    122. * 设置返回值状态
    123. *
    124. * @param docket 1
    125. * @return void
    126. * @author chenlijia
    127. * @since 下午 12:42 2019/8/5 0005
    128. **/
    129. private void createResponseMessage(Docket docket) {
    130. List<ResponseMessage> list = Lists.newArrayList();
    131. ResponseStatusEnum[] values = ResponseStatusEnum.values();
    132. for (ResponseStatusEnum value : values) {
    133. int code = value.getCode();
    134. String name = value.getName();
    135. ResponseMessage responseMessage = new ResponseMessageBuilder().code(code).message(name).build();
    136. list.add(responseMessage);
    137. }
    138. docket.globalResponseMessage(RequestMethod.GET, list);
    139. docket.globalResponseMessage(RequestMethod.POST, list);
    140. }

    image.png
    此时,当我们运行项目的时候,访问 http://localhost:端口/ht/doc.html 就可以看到文档了,但是这些方法都没有备注信息。
    然后我们找到一个路由,进行配置路由的信息,如下:
    类上的 @Api 就是用来标注这个路由分组的名字,@ApiOperation 就是用来这个路由的名字。

    1. @RestController
    2. @RequestMapping(value = "admin/admin")
    3. @Api(tags = "后台用户")
    4. @PropertyCheck
    5. public class AdminController {
    6. @Autowired
    7. private AdminBiz biz;
    8. /**
    9. * 添加
    10. *
    11. * @param params
    12. * @return
    13. */
    14. @PostMapping(value = "add")
    15. @ApiOperation(value = "添加")
    16. public Result add(@RequestBody AddParams params) {
    17. return biz.add(params);
    18. }
    19. }

    那么,我们接口里的字段如果进行标注呢,比如我们的参数是一个对象的话,我们可以在对象的字段上进行标注,如果不是的话,可以直接在路由的方法上进行标注。如下:
    @ApiModel 表示这是一个 Api 对象,@ApiModelProperty 表示这个字段的名称

    1. @ApiModel
    2. public class AddParams {
    3. /**
    4. * 账号
    5. */
    6. @ApiModelProperty("账号")
    7. private String account;
    8. /**
    9. * 密码
    10. */
    11. @ApiModelProperty("密码")
    12. private String password;
    13. }