swagger整合knife4j
导入依赖
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version></dependency>
引入配置
我们自己写一个配置类也好,我这里写道webconfig里边
package com.sky.config;import com.sky.interceptor.JwtTokenAdminInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;/*** 配置类,注册web层相关组件*/
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {/*** 通过knife4j生成接口文档* @return*/@Beanpublic Docket docket() {ApiInfo apiInfo = new ApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller")).paths(PathSelectors.any()).build();return docket;}/*** 设置静态资源映射* @param registry*/protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}
}
这里要特别注意要写下边的addResourceHandlers,加入资源过滤,不然springmvc会以为是controller
,会有问题
比较重要的就是这里的apis
要写我们要监控的包的类,通常来说,后端看的都是controller,所以最好是我们要时常编写的接口文件夹
展示
在浏览器上输入
你的项目地址 + /doc.html
例如我这个项目的网址是http://localhost:8080/
那么只要输入http://localhost:8080/doc.html
最后就可以愉快的开发拉
常用注解
@Api 用在类上,例如controller
@ApiOperation 用在方法上,例如controller的方法上
@ApiModel 用在类上,例如entity,dto,vo
@ApiModelProperty 用在属性上,例如类里边的成员变量
@Api
@RestController
@RequestMapping("/admin/employee")
@Slf4j
@Api(tags = "员工相关注解")
public class EmployeeController {...
}
在这里就可以显示
@ApiOperation
/*** 登录** @param employeeLoginDTO* @return*/@PostMapping("/login")@ApiOperation("员工登录")public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) {...
}
专门放到controller的方法里边
@ApiModel @ApiModelProperty
这两主要是和dto,vo,entity的类有关
一个是给类上加的注释,一个是给属性加注释
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "员工登录返回的数据格式")
public class EmployeeLoginVO implements Serializable {@ApiModelProperty("主键值")private Long id;@ApiModelProperty("用户名")private String userName;@ApiModelProperty("姓名")private String name;@ApiModelProperty("jwt令牌")private String token;}
总的来说,就是为了更好管理一点,写点注释
设置不同端的接口分离
我这里有两个端,一个是后端,一个是用户端,如果我按照上面的配置去搞的化,会让两个端的接口杂糅在一起,不好看,所以这里我们要做分离
继续上面的配置,我们只需要稍微改一下配置就行
这是我两个端的不同的controller文件夹
我们再mvc配置中,配置
/*** 通过knife4j生成接口文档,这里是扫描后端接口* @return*/@Beanpublic Docket docket1() {ApiInfo apiInfo = new ApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).groupName("后端接口").apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin")).paths(PathSelectors.any()).build();return docket;}/*** 通过knife4j生成接口文档,这里是扫描用户端接口* @return*/@Beanpublic Docket docket2() {ApiInfo apiInfo = new ApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).groupName("用户端接口").apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller.user")).paths(PathSelectors.any()).build();return docket;}
写两个docket就ok,不同的是配置basePackage分别为不同的controller文件夹,这样就ok了,其他配置照旧就ok
效果
这样就能分开了~