首先,我们在 pom.xml 文件里添加一个依赖
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.7</version></dependency>
然后再建个包,用于防止 swagger 的配置类,如 conf,然后再建一个类,是我们用于配置 swagger 的类。
对以下的代码的备注: initCreateDocket 方法是创建一个接口分组的方法,有时候我们写接口会分为 app 的接口,后台管理的接口等,根据端进行分一下组,不然不同的前端看的是同一套接口就比较乱,我们可以将里面的接口作者等信息稍作修改一下。 createApiAdmin 方法就是创建后台管理的接口,接口前缀是 /xican/admin/ 的就会被划分到这个分组,其他几个方法也是类似的哈。
@Configuration@EnableSwagger2WebMvc@Profile(value = {"test", "online", "local", "gs"})public class SwaggerConf {/*** 初始化创建 docket** @param controllerPathPattern 控制器通配符拦截,表示显示哪些控制器* @param groupName 组名* @return springfox.documentation.spring.web.plugins.Docket* @author chenlijia* @since 下午 12:56 2019/8/5 0005**/private Docket initCreateDocket(String controllerPathPattern, String groupName) {ParameterBuilder builder = new ParameterBuilder();builder.name(Constants.TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();ArrayList<Parameter> parameters = Lists.newArrayList();parameters.add(builder.build());ApiInfo apiInfo = new ApiInfoBuilder().title("喜餐订货管理系统API文档").contact(new Contact("陈礼佳", "http://192.168.1.43:8090/toutoumai", "571740367@qq.com")).version("1.0").description("喜餐订货管理系统接口").build();ApiSelectorBuilder apis = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select().apis(RequestHandlerSelectors.any());if (StringUtils.hasText(controllerPathPattern)) {apis.paths(PathSelectors.ant(controllerPathPattern));} else {apis.paths(PathSelectors.any());}Docket docket = apis.build();if (StringUtils.hasText(groupName)) {docket.groupName(groupName);}//headerdocket.globalOperationParameters(parameters);return docket;}/*** 注入swagger配置** @return*/@Beanpublic Docket createApiAdmin() {Docket docket = initCreateDocket("/xican/admin/**", "后台接口");docket.useDefaultResponseMessages(false);createResponseMessage(docket);return docket;}/*** 注入swagger配置** @return*/@Beanpublic Docket createApiSupplierAdmin() {Docket docket = initCreateDocket("/xican/supplier/admin/**", "供应商后台接口");docket.useDefaultResponseMessages(false);createResponseMessage(docket);return docket;}/*** 注入swagger配置** @return*/@Beanpublic Docket createApiFoodManagerAdmin() {Docket docket = initCreateDocket("/xican/food/manager/**", "餐饮后台接口");docket.useDefaultResponseMessages(false);createResponseMessage(docket);return docket;}/*** 注入swagger配置** @return*/@Beanpublic Docket createApiSupplierApp() {Docket docket = initCreateDocket("/xican/supplier/app/**", "供应商小程序接口");docket.useDefaultResponseMessages(false);createResponseMessage(docket);return docket;}/*** 注入swagger配置** @return*/@Beanpublic Docket createApiCanteen() {Docket docket = initCreateDocket("/xican/canteen/**", "食堂接口");docket.useDefaultResponseMessages(false);createResponseMessage(docket);return docket;}/*** 注入swagger配置** @return*/@Beanpublic Docket createApiSystem() {Docket docket = initCreateDocket("/xican/system/**", "系统接口");docket.useDefaultResponseMessages(false);createResponseMessage(docket);return docket;}/*** 注入swagger配置** @return*/@Beanpublic Docket createApiRPC() {Docket docket = initCreateDocket("/xican/rpc/**", "远程调用接口");docket.useDefaultResponseMessages(false);createResponseMessage(docket);return docket;}/*** 设置返回值状态** @param docket 1* @return void* @author chenlijia* @since 下午 12:42 2019/8/5 0005**/private void createResponseMessage(Docket docket) {List<ResponseMessage> list = Lists.newArrayList();ResponseStatusEnum[] values = ResponseStatusEnum.values();for (ResponseStatusEnum value : values) {int code = value.getCode();String name = value.getName();ResponseMessage responseMessage = new ResponseMessageBuilder().code(code).message(name).build();list.add(responseMessage);}docket.globalResponseMessage(RequestMethod.GET, list);docket.globalResponseMessage(RequestMethod.POST, list);}

此时,当我们运行项目的时候,访问 http://localhost:端口/ht/doc.html 就可以看到文档了,但是这些方法都没有备注信息。
然后我们找到一个路由,进行配置路由的信息,如下:
类上的 @Api 就是用来标注这个路由分组的名字,@ApiOperation 就是用来这个路由的名字。
@RestController@RequestMapping(value = "admin/admin")@Api(tags = "后台用户")@PropertyCheckpublic class AdminController {@Autowiredprivate AdminBiz biz;/*** 添加** @param params* @return*/@PostMapping(value = "add")@ApiOperation(value = "添加")public Result add(@RequestBody AddParams params) {return biz.add(params);}}
那么,我们接口里的字段如果进行标注呢,比如我们的参数是一个对象的话,我们可以在对象的字段上进行标注,如果不是的话,可以直接在路由的方法上进行标注。如下:
@ApiModel 表示这是一个 Api 对象,@ApiModelProperty 表示这个字段的名称
@ApiModelpublic class AddParams {/*** 账号*/@ApiModelProperty("账号")private String account;/*** 密码*/@ApiModelProperty("密码")private String password;}
