Knife4J在项目中的使用

Knife4j介绍

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍!

knife4j的前身是swagger-bootstrap-ui,为了契合微服务的架构发展,由于原来swagger-bootstrap-ui采用的是后端Java代码+前端Ui混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为knife4j


Knife4j在项目中的使用

一、在platform-framework中引入依赖

<!--引入Knife4j的官方start包,Swagger2基于Springfox2.10.5项目-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <!--使用Swagger2-->
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>${knife4j.version}</version>
        </dependency>

二、建立工具类

使用到EnableSwagger2注解,用来开启swagger和EnableKnife4j来开启knife4j

/**
 * @program:
 * @description: knife4j配置类
 * @author: cssf
 * @date: 2022-12-12
 **/
@Configuration
@EnableSwagger2
@EnableKnife4j
public class Knife4jConfiguration {

    /*需要在配置文件里配置这三个配置*/
    /*配置开启禁用swagger*/
    @Value("${swagger.enabled}")
    private boolean enabled;

    /*配置模块名*/
    @Value("${swagger.groupName}")
    private String groupName;

    /*配置需要扫描的包*/
    @Value("${swagger.basePackage}")
    private String basePackage;

    /**
     * @Description: Swagger 实例 Bean是Docket,所以通过配置Docket实例来配置Swagger
     * @return: springfox.documentation.spring.web.plugins.Docket
     * @Author: JiaChaoYang
     * @Date: 2022-09-24 - 11:36
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)//文档类型,我这里使用的是swagger3
                //是否启用swagger
                .enable(enabled)
                //包名,模块名
                .groupName(groupName)
                //删除swagger中的操作的响应体
                .useDefaultResponseMessages(false)
                //展示在Swagger页面上的自定义工程描述信息
                .apiInfo(apiInfo())
                //选择展示哪些接口
                .select()
                //配置需要扫描的路径(controller)
                .apis(RequestHandlerSelectors.basePackage(basePackage))
                //给所有文档都生成文档路径
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * @Description: Swagger的描述信息
     * @return: springfox.documentation.service.ApiInfo
     * @Author: JiaChaoYang
     * @Date: 2022-09-24 - 11:33
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //描述信息
                .description("测试Knife4j")
                //可以通过swagger联系一个人,即联系方式
                .contact(new Contact("Chengsf", "https://127.0.0.1:8080/doc.html", "chengsf@normstar.com"))
                //版本
                .version("v1.0")
                //标题
                .title("测试文档")
                .build();
    }
}

三、其他微服务模块如果需要引用,须进行如下配置

以ns-service-support-user作为实验对象

1、在controller层创建两个controller类

@Api(tags = "首页模块")
@RestController
public class IndexController {

    @ApiImplicitParam(name = "name",value = "姓名",required = true)
    @ApiOperationSupport(author = "chengsf")//author接口添加作者,order排序,接口展示顺序
    @ApiOperation(value = "向客人问好")
    @GetMapping("/sayHi")
    public ResponseEntity<String> sayHi(@RequestParam(value = "name")String name){
        return ResponseEntity.ok("Hi:"+name);
    }
}
@Api(tags = "登录模块")
@RestController
public class loginController {

    @PostMapping("login")
    @ApiOperation("登录")
    public HashMap<String, Object> login() {
        HashMap<String, Object> result = new HashMap<>(2);
        result.put("success", true);
        result.put("token", "778877669999");
        return result;
    }

}

2、引入platform-framework模块

<dependency>
    <groupId>com.normstar</groupId>
    <artifactId>ns-platform-framework</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

3、在application-dev.properties增加配置,对应configuration类中的

    /*需要在配置文件里配置这三个配置*/
    /*配置开启禁用swagger*/
    @Value("${swagger.enabled}")
    private boolean enabled;

    /*配置模块名*/
    @Value("${swagger.groupName}")
    private String groupName;

    /*配置需要扫描的包*/
    @Value("${swagger.basePackage}")
    private String basePackage;
swagger.enabled=true
#登录鉴权微服务模块
swagger.groupName=support
#你的controller路径
swagger.basePackage=com.normstar.szcp.controller
#knife版本兼容问题
spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER

4、为扫到对应configuration类,添加resources/META-INF/spring.factories文件进行关联

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.normstar.common.configuration.Knife4jConfiguration

或者修改启动类(将@SpringBootApplication改为@EnableAutoConfiguration,@ComponentScan(value = “com.normstar.*”))

@Slf4j
@SpringBootApplication
@EnableDiscoveryClient
//@EnableAutoConfiguration
//@ComponentScan(value = "com.normstar.*")
public class ServiceSupportUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceSupportUserApplication.class, args);
        System.out.println("支撑启动成功!");
    }
}

*4中任选一个就行

5、如果配置有拦截器或过滤器,需要进行如下配置:

需要在拦截器配置让MVC加载Swagger的静态资源

/**
    * @Description: 让MVC加载Swagger的静态资源
    * @Param: [registry]
    * @return: void
    */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/**").
                addResourceLocations("classpath:/static/");
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

        super.addResourceHandlers(registry);
    }


需要将Swagger放到白名单,即不去鉴权,需要把下边的配置给排除掉

"springfox",
"swagger",
"v3",
"webjars",
"doc.html",
"favicon.ico",
"api-docs"

6、启动之后效果

在这里插入图片描述

四、knife4j部分常用功能以及注解

全局参数设置:

后期各模块接口的使用,需要用到token,那么我们使用了登录接口后拿到token值,在全局参数中进行设置之后,所有的接口都会默认带上这个token值。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果不想这么麻烦,可以使用AfterScript实现自动set token

  • knife4j的增强模式提供AfterScript可以通过脚本实现将登录时token设成“环境变量”,在各个接口请求头中加入token
//ke = knife4jenvironment
var code=ke.response.data.code;
if(code=='20000'){
//获取token
var token=ke.response.data.data.token;
//设置token到请求头
ke.global.setHeader("Authorization",token);
alert("已自动设置请求头")
}

在这里插入图片描述

*详细可参考文档

常用部分注解:

//Swagger2注解
//主要包含注解:
@Api:定义接口分组名称
@ApiImplicitParam: 单个参数注释
@ApiImplicitParams:多个参数注释
@ApiModel:实体类定义
@ApiModelProperty:实体属性定义
@ApiOperation:接口定义
@ApiParam:参数注释
@ApiResponse:响应码
@ApiResponses:多个响应码

需要更多内容,请查阅官方文档

TFMM-1676017459819)]

*详细可参考文档

常用部分注解:

//Swagger2注解
//主要包含注解:
@Api:定义接口分组名称
@ApiImplicitParam: 单个参数注释
@ApiImplicitParams:多个参数注释
@ApiModel:实体类定义
@ApiModelProperty:实体属性定义
@ApiOperation:接口定义
@ApiParam:参数注释
@ApiResponse:响应码
@ApiResponses:多个响应码

需要更多内容,请查阅官方文档

https://doc.xiaominfo.com/docs/quick-start

感谢下面这位兄弟,能够耐心解答!
在这里插入图片描述

https://blog.csdn.net/lovexinxin_/article/details/127150672#comments_24576986

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Knife4j是基于Swagger的增强UI实现,可以帮助我们生成API文档以及测试接口,使接口文档更加直观、易懂。在SpringBoot项目,我们可以通过以下步骤来实际使用Knife4j: 1.添加Knife4j依赖 在pom.xml文件添加以下依赖: ``` <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> ``` 2.配置Swagger 在SpringBoot项目,我们可以通过@Configuration注解来配置Swagger,例如: ``` @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(new ApiInfoBuilder() .title("API文档") .description("这是一个Swagger API文档") .version("1.0.0") .build()) .select() .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) .paths(PathSelectors.any()) .build(); } } ``` 其,@EnableSwagger2注解表示开启Swagger功能,@Bean注解表示将该方法返回的对象注册到Spring容器,Docket对象表示用于配置Swagger的构建器,apiInfo方法用于设置文档基本信息,select方法用于指定要扫描的接口,这里我们扫描com.example.demo.controller包下的接口。 3.访问Knife4j页面 启动SpringBoot项目后,访问http://localhost:8080/doc.html即可进入Knife4j页面,可以看到自动生成的接口文档以及测试接口的功能。通过点击接口名称,可以查看该接口的详细信息,包括请求参数、响应参数等。同时,我们也可以在页面上进行接口测试,方便调试接口。 总的来说,使用Knife4j可以让接口文档更加直观、易懂,同时也方便了前后端的沟通与开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值