springboot3.0.11-SNAPSHOT使用knife4j-openapi3所遇见的问题

这篇具有很好参考价值的文章主要介绍了springboot3.0.11-SNAPSHOT使用knife4j-openapi3所遇见的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.本地工作环境

ide2021

jdk17

springboot3.0.11-SNAPSHOT

2.使用knife4j-openapi3的原因

在使用springboot3写完一个项目后,想快速生成一篇接口文档,供自己观看。在网上冲浪一段时间后,发现使用Swagger文档比较合适,通过少量的注解来完成一篇复杂的文档。说干就干,直接cope网上的资料写一个demo来用,发现项目无法正常启动。在翻阅了博客后,发现Swagger2暂时无法适配springboot3。后再其他博客中发现可以使用openapi兼容springboot3,同时,knife4j是对swagger的美化,所以使用knife4j-openapi3。

3.进行配置

对应的依赖如下:

<dependency>
     <groupId>com.github.xiaoymin</groupId>
     <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
     <version>4.1.0</version>
</dependency>

配置文件采用yml格式,所以在配置中对knife4j进行如下简单配置

# 在线文档配置
springdoc:
  swagger-ui:
    # 配置swagger-ui界面访问路径
    path: /swagger-ui.html
    # 包扫描路径
  packages-to-scan: com.pjx.sys.controller
  # 默认开启wend
  api-docs:
    enabled: true

上述的 packages-to-scan 也就是包扫描路径,是对控制层进行扫描,也就是你的controller层,只要扫描到外面那一层,不要深入到内部。路径可以直接复制。

knife4j-openapi3-jakarta-spring-boot-starter,springboot,java

此时还需对knife4j进行配置,才可以使用。

在自己的项目中创建SwaggerConfig类进行配置

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI springShopOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("标题")
                        //描叙
                        .description("我的API文档")
                        //版本
                        .version("v1")
                        //作者信息,自行设置
                        .contact(new Contact().name("彭").email("11111").url("https://www.baidu.com"))
                        //设置接口文档的许可证信息
                        .license(new License().name("Apache 2.0").url("http://springdoc.org")));
    }

}

在这里基本的配置算是完成了,接下来用一个简单的demo演示

knife4j-openapi3-jakarta-spring-boot-starter,springboot,java

上面是对应的结构,下面分别为控制层和pojo

import com.example.test.pojo.Books;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "测试",description = "描述")
@RestController
@RequestMapping("/getBooks")
public class BookController {

    @GetMapping
    @Operation(summary = "测试接口")
    public Books getBooks(){
        Books books = new Books();
        books.setId(1);
        return books;
    }
}
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@Schema
@Data
public class Books {
    @Schema(name = "id",description = "用户id",defaultValue = "12",example = "1")
    private Integer id;
}

以上完成后,一个简单的文档就完成了,直接看效果。

doc.html

knife4j-openapi3-jakarta-spring-boot-starter,springboot,java

swagger-ui

knife4j-openapi3-jakarta-spring-boot-starter,springboot,java

在demo完成,发现没有问题后,便开始在自己的项目中导入配置,然后出现一系列问题。

4.自己的项目中出现的问题

4.1可以访问swagger -ui但是无法访问doc.html

knife4j-openapi3-jakarta-spring-boot-starter,springboot,java

当时我也不知道怎么回事,在想,为什么不可以显示?为什么swagger-ui可以使用?为什么demo可以使用?程序员的三连懵逼。。。最后在浏览了大量的博客后,发现是自己脑子抽了。

首先,要知道,这些资源在哪里,他们在knife4j的jar包中,包你虽然导入了,但是资源你不告诉spring boot,这让它怎么找?找空气吗?其次,swagger-ui可以可以使用,是因为在yml文件中配置了,doc没有配置,也没有配置方法,demo可以使用,而项目中的不可以使用,是因为springboot版本太高,有时找不到资源,需要你手动告诉它,也就回到问题1了。

对应的资源如下:knife4j-openapi3-jakarta-spring-boot-starter,springboot,java

4.1.1解决方法

在WebConfig配置类中实现WebMvcConfigurer接口,重写addResourceHandlers方法,导入资源的位置。

@Component
public class WebConfig implements WebMvcConfigurer {

 /**
     * 静态资源映射
     *
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
     registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
     registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

}

如此,资源便让springboot找到了,当然,如果配置了拦截器,则需要忽略一些资源,可以在WebMvcConfigurer接口中实现addInterceptors方法,在内部用addInterceptor定义自己的拦截器,用addPathPatterns添加拦截路径和excludePatterns添加忽略路径,我的忽略路径如下

"/v3/api-docs/**", "/doc.html", "/webjars/**", "/swagger-resources", "/swagger-ui/**"

若不知道要忽略的具体资源,可以直接在浏览器的   网络  中,采用Shift+f5的方式,哪些请求报错,就忽略哪些资源。这样,doc.html便可以访问了。

4.2关于在doc.html找不到图标的问题

这个问题说大嘛也不大,但是看着浏览器报错也不是很喜欢,在网上查阅了资料后,发现可能是图标侵权了,然后后面不让用了。

knife4j-openapi3-jakarta-spring-boot-starter,springboot,java

4.2.1解决方法

自行在静态资源文件夹下放一张favicon.ico的图片,喜欢什么就放什么,但是后缀名要相同。一定要ico的文件。从网上下载一张喜欢的,后缀名自己改好。

knife4j-openapi3-jakarta-spring-boot-starter,springboot,java

放入后,并没有万事大吉了,还要让spring boot知道这个图标,不然还是无法访问,同样需要添加静态资源映射。在4.1.1方法里面添加

registry.addResourceHandler("favicon.ico").addResourceLocations("classpath:/static/");

同时在忽略路径里面添加 /favicon.ico, 也就是放行这张图,让浏览器可以找到。

最后解决完成。撒花。

开玩笑啦。

5.在实体类和控制层的简单运用。

5.1实体类

直接上代码,好吧。

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@Schema
@Data
public class User {
    //id
    @Schema(name = "id",description = "序列号",defaultValue = "1",example = "1")
    private Integer id;
    //用户名
    @Schema(name = "username",description = "用户名",defaultValue = "not null",example = "admin")
    private String username;
    //密码
    @Schema(name = "password",description = "密码",defaultValue = "not null",example = "******")
    private String password;
    //权限id
    @Schema(name = "roleId",description = "权限id,判断是否拥有此权限",defaultValue = "not null",example = "admin")
    private Integer roleId;
    //是否默认
    @Schema(name = "is_default",description = "0为默认用户,1为普通用户",defaultValue = "1",example = "1")
    private Integer is_default;
    //权限
    @Schema(hidden = true)
    private Role role;
    //token
    @Schema(name = "token",description = "存储前端的token",defaultValue = "not null",example = "dsafasdff341234123...")
    private String token;
}

@Schema注解用于描述类的属性,description为描叙,defaultValue为默认值,example为举例子,hidden为忽略。

5.2控制层

import com.pjx.sys.service.UploadService;
import com.pjx.sys.util.R;
import com.pjx.sys.util.SYSCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileNotFoundException;

@Tag(name = "上传图片")
@RestController
@RequestMapping("/adminapi/upload")
public class UploadController {

    //导入UploadService
    @Resource
    private UploadService uploadService;

    @Operation(method = "POST", summary = "更新背景图", description = "通过传入指定规格的图片,更新实验室的背景图")
    @PostMapping
    public R uploadBg(@Parameter(description = "图片对象") @RequestParam("file") MultipartFile file) {
        try {
            uploadService.uploadBg(file);
            return new R(SYSCode.CODE_SUCCESS, "上传成功");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return new R(SYSCode.CODE_ERROR, "上传失败");
    }
}

@Tag用于对API接口进行标记和分组。

@Operation用于对API接口方法进行详细的操作描述,method为方法,summary为简介,description为描叙。

@Parameter用于指定操作的参数列表。

其他的方法不全,暂时如下:

knife4j-openapi3-jakarta-spring-boot-starter,springboot,java

knife4j-openapi3-jakarta-spring-boot-starter,springboot,java文章来源地址https://www.toymoban.com/news/detail-766694.html

到了这里,关于springboot3.0.11-SNAPSHOT使用knife4j-openapi3所遇见的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux-0.11 boot目录head.s详解

    在head.s中,操作系统主要做了如下几件事: 重新设置中断描述符和全局描述符 检查A20地址线是否开启 检查数学协处理器 初始化页表并开启分页 跳转到main函数执行 重新设置IDT和GDT 在setup.s中我们已经设置过了IDT和GDT, 为什么还要再设置一遍? 因为setup.s中设置的IDT和GDT后面

    2024年02月06日
    浏览(31)
  • springboot3使用swagger文档

    在pom.xml里面引入如下俩个依赖 然后启动项目,打开浏览器访问 http://localhost:8080/swagger-ui.html 就可以看到生成的文档了  最后附上swagger2到open api的注解变化    

    2024年02月13日
    浏览(38)
  • 【公告】BSV节点软件发布最新升级版本v1.0.11

    发表时间:2022年4月21日 信息来源:bitcoinsv.io 本次新发布的v1.0.11是基于v1.0.10版的推荐升级版本,对交易费的配置选项进行了一些更改,并修复了一些错误。  本次发布的软件里,相较此前版本的变更内容具体如下: 对以下配置选项进行了更名  -blockmintxfee 默认禁用 Bloom 过滤

    2023年04月08日
    浏览(74)
  • Linux-0.11 kernel目录进程管理asm.s详解

    该模块和CPU异常处理相关,在代码结构上asm.s和traps.c强相关。 CPU探测到异常时,主要分为两种处理方式,一种是有错误码,另一种是没有错误码,对应的方法就是 error_code 和 no_error_code 。在下面的函数详解中,将主要以两个函数展开。 no_error_code 对于一些异常而言,CPU在出现

    2024年02月07日
    浏览(48)
  • Linux-0.11 文件系统read_write.c详解

    该模块实现了文件系统通用的读写的方法read/write/lseek。 根据文件类型的不同,在内部将调用不同的方法。如果是管道文件,则调用pipe.c中的读写方法,如果是字符设备,则会调用char_dev.c中的方法,如果是目录或者普通文件,将调用file_dev.c中的读写方法,如果是块设备文件,

    2024年02月06日
    浏览(34)
  • Linux-0.11 文件系统file_dev.c详解

    该文件主要提供了普通文件的读写方法 file_read 和 file_write ,这两个函数在系统调用_sys_read和sys_write中被调用。 file_read 该函数是文件读的函数。 首先定义了一些参数,这里不做介绍,下面用到时,再详解。 接着进行参数的校验, 如果入参count等于0, 代表不读任何数据,则

    2024年02月07日
    浏览(37)
  • 【SpringBoot3】使用 devtools 实现代码热部署

    Spring Boot DevTools是一组用于提高开发人员生产力,并加速Spring Boot应用程序开发的工具。它提供了一些功能,可以帮助开发人员更快速地构建应用程序,并减少常见的开发问题。 Spring Boot DevTools的主要作用包括: 自动重新加载 :当应用程序中的代码发生变化时,DevTools会自动

    2024年01月16日
    浏览(29)
  • SpringBoot3.0 整合 ElasticSearch8.5.0 及使用

    这两个版本都是目前较新的版本,本文选用的依赖是 spring-boot-starter-data-elasticsearch:3.0 ,这个新版本也是改用了es的 elasticsearch-java API,全面推荐使用Lambda语法;另外SpringData本身推出了 Repository 功能(有些类似Mybatis-Plus)的功能,也支持注解简化开发。 Docker 快速部署 单机 ela

    2024年02月11日
    浏览(53)
  • 阿里巴巴开源Chat2DB v1.0.11 初体验

    作为一名阿里巴巴开源项目的拥护者,从Chat2DB开源至今都有关注这个开源项目,因为之前的版本还存在较多BUG,暂时就没有分享,目前升级到 v1.0.11 版本后,我来谈谈我个人的一个使用感受 Chat2DB 是一款有开源免费的多数据库客户端工具,支持windows、mac本地安装,也支持服

    2024年02月09日
    浏览(47)
  • SpringBoot3之GraalVM之Windows详细安装及使用教程

    我直接使用的是IDEA plugins文件夹下的maven 新建MAVEN_HOME环境变量 Path环境变量追加 因为GraalVM需要调用操作系统的底层工具,而Windows底层工具是VisualStudio,所以我们要先下载安装好VisualStudio。 下载Visual Studio Community 《Visual Studio Community官网下载》 下载完以后直接安装即可 选择

    2024年02月14日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包