springboot整合swagger3和knife4j的详细过程

 更新时间:2022年11月11日 08:59:59   作者:迷失的小鹿  
knife4j的前身是swagger-bootstrap-ui,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍,下面这篇文章主要介绍了springboot整合swagger3和knife4j的详细过程,需要的朋友可以参考下

依赖

 <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.3</version>
</dependency>

application.yml配置

  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher ## 解决Failed to start bean ‘documentationPluginsBootstrapper‘ 问题
knife4j:
  enable: true

swagger配置类

package com.example.springbooth2.config;

import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
@EnableOpenApi//Swagger 开启生成接口文档功能
public class SwaggerConfig {

    /**
     * ture 启用Swagger3.0, false 禁用
     */
    @Value("${knife4j.enable}")
    private Boolean enable;

    @Bean
    Docket docket() {
        return new Docket(DocumentationType.OAS_30)
                //配置网站的基本信息
                .apiInfo(apiInfo())
                .enable(enable)
                .select()
                //指定接口的位置
                // RequestHandlerSelectors.basePackage("com.example.springbooth2.controller") 接口的包所在路径
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                // 指定路径处理PathSelectors.any()代表所有的路径
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("swagger3") //接口文档标题
                .description("接口文档") //接口文档描述
                //作者信息
                // new Contact("作者","作者URL","作者Email")
                .contact(new Contact("jane", "http://www.baidu.com", "123@qq.com"))
                .version("1.0")//版本
                .build();
    }
}

controller

package com.example.springbooth2.controller;

import com.example.springbooth2.config.ResponseResult;
import com.example.springbooth2.entity.User;
import com.example.springbooth2.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@Api(tags = "用户管理接口")
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    @ApiOperation("添加用户")
    @ApiImplicitParams({ // 参数名称
            @ApiImplicitParam(name = "userId", value = "用户id"),
            @ApiImplicitParam(name = "userName", value = "用户名",  required = true)
    })
    @PostMapping("add")
    public User add(User user) {
        userService.addUser(user);
        return user;
    }

    @ApiOperation("查询所有用户")
    @GetMapping("list")
    public ResponseResult<User> list() {
        return ResponseResult.success(userService.list());
    }

    @GetMapping("/findOne")
    public ResponseResult<User> findOne() {
        return ResponseResult.success(userService.findById(1));
    }
}

测试

knife4j访问地址 http://localhost:9090/doc.html

swagger访问地址 http://localhost:9090/swagger-ui/index.html

swagger常用注解说明

@Api

用在请求的类上

@Api(tags = “该类的作用进行说明”)

@ApiOperation

@ApiOperation(value=“改方法的作用”,note=“备注”)

@ApiImplicitParams

@ApiImplicitParams:用在请求的方法上,表示一组参数说明

@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面

  • name:参数名
  • value:参数的汉字说明、解释
  • required:参数是否必须传
  • paramType:参数放在哪个地方
  • · header --> 请求参数的获取:@RequestHeader
  • · query --> 请求参数的获取:@RequestParam
  • · path(用于restful接口)–> 请求参数的获取:@PathVariable
  • dataType:参数类型,默认String,其它值dataType=“Integer”
  • defaultValue:参数的默认值

多个 @ApiImplicitParam 注解需要放在一个 @ApiImplicitParams 注解中

@ApiImplicitParam 注解中虽然可以指定参数是必填的,但是却不能代替 @RequestParam(required = true) ,

前者的必填只是在 Swagger 框架内必填,抛弃了 Swagger ,这个限制就没用了,所以假如开发者需要指定一个参数必填, @RequestParam(required = true) 注解还是不能省略。

@ApiModel

如果参数是一个对象(例如上文的更新接口),对于参数的描述也可以放在实体类中。例如下面一段代码
@ApiModelProperty:用在属性上,描述类的属性

@ApiModel(value = "用户对象",description = "用户表")
public class User {
    @Id
    @ApiModelProperty(value = "id",required = true)
    private int userId;
    @ApiModelProperty(value = "用户名称",required = true)
    private String userName;
}

 总结

到此这篇关于springboot整合swagger3和knife4j的文章就介绍到这了,更多相关springboot整合swagger3和knife4j内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot整合websocket后启动报错(javax.websocket.server.ServerContainer not available)

    springboot整合websocket后启动报错(javax.websocket.server.ServerCont

    这篇文章主要介绍了springboot整合websocket后启动报错(javax.websocket.server.ServerContainer not available),通过分析错误信息、排查代码和配置,找出问题的根源,并给出相应的解决方案,感兴趣的可以了解一下
    2024-01-01
  • java 中List删除实例详解

    java 中List删除实例详解

    这篇文章主要介绍了java 中List删除实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • 浅谈java实现redis的发布订阅(简单易懂)

    浅谈java实现redis的发布订阅(简单易懂)

    本篇文章主要介绍了浅谈java实现 redis的发布订阅(简单易懂),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 深入理解JDK8中Stream使用

    深入理解JDK8中Stream使用

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。这篇文章主要介绍了JDK8中Stream使用解析,需要的朋友可以参考下
    2021-06-06
  • 基于java TCP网络通信的实例详解

    基于java TCP网络通信的实例详解

    本篇文章是对java中TCP网络通信的实例进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Java超详细介绍封装与访问控制修符

    Java超详细介绍封装与访问控制修符

    封装是一个非常广泛的概念,小到一个属性的封装,大到一个框架或者一个项目的封装,文中通过实例代码将详细介绍封装与访问控制修饰符
    2022-05-05
  • Java多线程通信wait()和notify()代码实例

    Java多线程通信wait()和notify()代码实例

    这篇文章主要介绍了Java多线程通信wait()和notify()代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Spring Boot编写拦截器教程实例解析

    Spring Boot编写拦截器教程实例解析

    这篇文章主要介绍了Spring Boot编写拦截器教程实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java11中基于嵌套关系的访问控制优化详解

    Java11中基于嵌套关系的访问控制优化详解

    Java(和其他语言)通过内部类支持嵌套类,要使其正常工作,需要编译器执行一些技巧,下面这篇文章主要给大家介绍了关于Java11中基于嵌套关系的访问控制优化的相关资料,需要的朋友可以参考下
    2022-01-01
  • Java StackTraceElement实例代码

    Java StackTraceElement实例代码

    这篇文章主要介绍了Java StackTraceElement实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02

最新评论