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
*/
@Bean
public 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
*/
@Bean
public 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
*/
@Bean
public 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
效果
这样就能分开了~