当前位置:   article > 正文

SpringBoot集成Knife4j接口管理工具_knife4j-openapi3-spring-boot-starter

knife4j-openapi3-spring-boot-starter

原创 CodeLeader 全栈开发那些事 2023-02-25 12:42 发表于陕西

收录于合集#SpringBoot19个

  • 1、导入依赖包

  • 2、配置Knife4j

  • 3、放行Knife4j的请求

  • 4、使用Knife4j注解

  • 5、实现效果

  平时开发项目都用的是Swagger2或者Swagger3,但是这两个UI看起来不是很舒服,今天看到了Knife4j,它对Swagger进行了增强,有很多个性化需求。Knife4j是一个集Swagger2 和 OpenAPI3 为一体的增强解决方案。

  官网地址:https://doc.xiaominfo.com/

1、导入依赖包

  在maven项目的pom.xml中引入Knife4j的依赖包

  1.         <dependency>
  2.             <groupId>com.github.xiaoymin</groupId>
  3.             <artifactId>knife4j-spring-boot-starter</artifactId>
  4.             <version>2.0.9</version>
  5.         </dependency>

  可以在Dependencies中查看是否引入成功。

image-20230224220214820

2、配置Knife4j

  在SpringBoot中创建swagger的配置类,如下

  1. @Configuration
  2. @EnableSwagger2WebMvc
  3. public class Knife4jConfiguration {
  4.     @Bean(value = "defaultApi2")
  5.     public Docket defaultApi2() {
  6.         List<Parameter> pars = new ArrayList<>();
  7.         ParameterBuilder tokenPar = new ParameterBuilder();
  8.         tokenPar.name("token")
  9.                 .description("用户token")
  10.                 .defaultValue("")
  11.                 .modelRef(new ModelRef("string"))
  12.                 .parameterType("header")
  13.                 .required(false)
  14.                 .build();
  15.         pars.add(tokenPar.build());
  16.         //添加head参数end
  17.         Docket docket=new Docket(DocumentationType.SWAGGER_2)
  18.                 .apiInfo(new ApiInfoBuilder()
  19.                         //.title("swagger-bootstrap-ui-demo RESTful APIs")
  20.                         .description("# swagger-bootstrap-ui-demo RESTful APIs")
  21.                         .termsOfServiceUrl("www.codeleader.top")
  22.                         .contact("test@qq.com")
  23.                         .version("1.0")
  24.                         .build())
  25.                 .globalOperationParameters(pars)
  26.                 //分组名称
  27.                 .groupName("2.X版本")
  28.                 .select()
  29.                 //这里指定Controller扫描包路径
  30.                 .apis(RequestHandlerSelectors.basePackage("com.java1234"))
  31.                 .paths(PathSelectors.any())
  32.                 .build();
  33.         return docket;
  34.     }
  35. }

  官网的配置如下图所示,我多配置了个head参数,目的是为了每次请求的时候在请求头上带上token参数,方便后端JWT的校验。

image-20230224220444253

3、放行Knife4j的请求

  由于我项目集成了SpringSecurity,所以这些请求默认都会被拦截,所以这里在配置类中放行这些文档的请求就行。

  在SpringSecurity配置类中重写WebSecurityConfigurerAdapter类的configure(WebSecurity web)方法,在这里放行指定的请求即可。

  1. /**
  2.      * 配置哪些请求不拦截,放行swagger
  3.      */
  4.     @Override
  5.     public void configure(WebSecurity web) throws Exception {
  6.        web.ignoring().mvcMatchers("/favicon.ico","/swagger-resources/**""/webjars/**""/v2/**""/swagger-ui.html/**""/doc.html");
  7.     }

4、使用Knife4j注解

  1. @Api(tags = "用户管理")
  2. @RestController
  3. @RequestMapping("/sys/user")
  4. public class SysUserController {
  5.     @Autowired
  6.     private SysUserService sysUserService;
  7.     @Autowired
  8.     private SysRoleService sysRoleService;
  9.     @Autowired
  10.     private SysUserRoleService sysUserRoleService;
  11.     @Autowired
  12.     private BCryptPasswordEncoder bCryptPasswordEncoder;
  13.     @Value("${avatarImagesFilePath}")
  14.     private String avatarImagesFilePath;
  15.     @ApiOperation("更新个人信息")
  16.     @PostMapping("/save")
  17.     @PreAuthorize("hasAnyAuthority('system:user:edit','system:user:add')")
  18.     public R save(@RequestBody @Valid SysUser sysUser){
  19.         if(sysUser.getId()==null||sysUser.getId()==-1){
  20.             sysUser.setPassword(bCryptPasswordEncoder.encode(sysUser.getPassword()));
  21.             sysUserService.save(sysUser);
  22.         }else{
  23.             sysUserService.updateById(sysUser);
  24.         }
  25.         return R.ok();
  26.     }
  27.     @ApiOperation("修改密码")
  28.     @PostMapping("updateUserPwd")
  29.     @PreAuthorize("hasAuthority('system:user:edit')")
  30.     public R updateUserPwd(@RequestBody SysUser sysUser){
  31.         SysUser currentUser = sysUserService.getById(sysUser.getId());
  32.         if(bCryptPasswordEncoder.matches(sysUser.getOldPassword(),currentUser.getPassword())){
  33.             currentUser.setPassword(bCryptPasswordEncoder.encode(sysUser.getNewPassword()));
  34.             sysUserService.updateById(currentUser);
  35.             return R.ok();
  36.         }else{
  37.             return R.error("输入旧密码错误!");
  38.         }
  39.     }
  40. }

  @Api(tags = "用户管理")定义标签分组接口,在这个类下定义的所有接口将位于这个标签之下

  @ApiOperation()定义具体的接口标题信息,notes可以为这个标签添加注释

  常用注解如下:

注解作用
@Api修饰整个类,描述Controller的作用
@ApiOperation描述一个类的一个方法,或者说一个接口
@ApiParam单个参数描述
@ApiModel用对象来接收参数
@ApiProperty用对象接收参数时,描述对象的一个字段
@ApiResponseHTTP响应其中1个描述
@ApiResponsesHTTP响应整体描述
@ApiIgnore使用该注解忽略这个API
@ApiError发生错误返回的信息
@ApiImplicitParam一个请求参数
@ApiImplicitParams多个请求参数

5、实现效果

  启动Spring Boot工程,在浏览器中访问:http://localhost/doc.html,我用的80端口,可以省略端口号。

image-20230224222018877

查看接口文档:

image-20230224222104608

调试接口:

image-20230224222117065

请求头这里默认有个token参数,是因为我在上面配置类中写的

image-20230224222149551

我们也可以在文档管理这里添加全局参数

image-20230224222222632

这个界面用起来比swagger-ui稍微舒服点,还可以。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号