Spring-boot3.4最新版整合swagger和Mybatis-plus

📅 发布时间:2026/7/7 10:08:36 👁️ 浏览次数:
Spring-boot3.4最新版整合swagger和Mybatis-plus
好家伙,今天终于开始用spring-boot3开始写项目了以后要彻底告别1.x和2.x了同样的jdk也来到了最低17的要求了,废话不多说直接开始这是官方文档的要求jdk最低是17 maven最低是3.6一. 构建工程,这一步就不需要给大家解释了吧二. 整合Knife4j1.大于 spring-boot 2.6.x 小于 spring-boot3.x的版本swagger.version3.0.0/swagger.version knife4j.version3.0.3/knife4j.version dependency groupIdio.springfox/groupId artifactIdspringfox-boot-starter/artifactId version${swagger.version}/version /dependency dependency groupIdcom.github.xiaoymin/groupId artifactIdknife4j-spring-boot-starter/artifactId version${knife4j.version}/version /dependency2. 然后配置接口文档Configuration EnableOpenApi public class Knife4jConfig { Bean public Docket createResetApi(){ return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) .paths(PathSelectors.any()) .build(); } Bean public Docket adminApi(){ return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .groupName(后台管理) .select() .apis(RequestHandlerSelectors.basePackage(com.demo.admin.controller)) .paths(PathSelectors.any()) .build(); } Bean public Docket webApi(){ return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .groupName(web端) .select() .apis(RequestHandlerSelectors.basePackage(com.demo.web.controller)) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title(接口文档标题) .description(描述) .contact(new Contact(你是哪一个, 127.0.0.1:8080, email)) .license(The Apache License) .termsOfServiceUrl(http://127.0.0.1:8080/api) .version(1.0) .build(); }3. 在代码中使用Api(tags 首页模块) RestController public class IndexController { ApiImplicitParam(name name,value 姓名,required true) ApiOperation(value 向客人问好) GetMapping(/sayHi) public ResponseEntityString sayHi(RequestParam(value name)String name){ return ResponseEntity.ok(Hi:name); } } Data ApiModel public class BaseQuery implements Serializable { private static final long serialVersionUID 1L; ApiModelProperty(value 当前页码) Integer pageNum PagesConstant.DEFAULT_PAGE; Range(min 1, max 200, message 每页条数取值范围 1-200) ApiModelProperty(value 每页条数 默认200) Integer pageSize PagesConstant.DEFAULT_PAGE_SIZE; ApiModelProperty(value 排序字段) String order; ApiModelProperty(value 是否升序) boolean asc; }下面是新版的使用方式1.添加最新的依赖dependency groupIdcom.github.xiaoymin/groupId artifactIdknife4j-openapi3-jakarta-spring-boot-starter/artifactId version${knife4j.version}/version /dependency2.编写配置文件,没有了2中的Docket,groupName,selectapis 等等…总的来说新版的变得更为简单了Configuration public class OpenApiConfig { /** * 默认 API 分组包含前端和后端接口 */ Bean public GroupedOpenApi defaultApi() { return GroupedOpenApi.builder() .group(default) // 分组名称 .packagesToScan(com.demo) // 匹配路径可以根据实际情况调整 .build(); } /** * 前端 API 分组只包含前端接口 */ Bean public GroupedOpenApi webApi() { return GroupedOpenApi.builder() .group(前端接口) // 分组名称 .pathsToMatch(/api/web/**) // 前端接口路径 .build(); } /** * 后端 API 分组只包含后端接口 */ Bean public GroupedOpenApi adminApi() { return GroupedOpenApi.builder() .group(后端接口) // 分组名称 .pathsToMatch(/api/admin/**) // 后端接口路径 .build(); } /** * 定制全局信息 */ Bean public OpenApiCustomizer customOpenApiCustomizer() { return openApi - openApi.info( new Info() .title(API 文档) .description(API 文档描述) .version(1.0.0) .contact(new Contact().name(API Team).email(api-teamexample.com)) ); }3.其中最重要的就是packagesToScan和pathsToMatch了具体是什么意思我们可以查看源代码给大家解释一下// 分组名称用于标识 OpenAPI 配置的组。 private final String group; // 要匹配的路径列表定义哪些路径会生成 OpenAPI 文档。 private final ListString pathsToMatch; // 要扫描的包名列表用于发现生成 OpenAPI 文档的类。 private final ListString packagesToScan; // 要排除的包名列表这些包中的内容不会生成 OpenAPI 文档。 private final ListString packagesToExclude; // 要排除的路径列表这些路径不会生成 OpenAPI 文档。 private final ListString pathsToExclude; // 要匹配的响应类型列表例如 application/json。 private final ListString producesToMatch; // 要匹配的 HTTP 头部列表用于限定生成文档的请求。 private final ListString headersToMatch; // 要匹配的请求体类型列表例如 application/json。 private final ListString consumesToMatch; // 显示名称用于描述 OpenAPI 配置的组。 private final String displayName; // 自定义 OpenAPI 文档的定制器列表。 private ListOpenApiCustomizer openApiCustomizers; // 自定义 OpenAPI 操作API 方法文档的定制器列表。 private ListOperationCustomizer operationCustomizers; // 自定义路由操作的文档定制器列表。 private ListRouterOperationCustomizer routerOperationCustomizers; // 用于过滤哪些方法应该包含在 OpenAPI 文档中的过滤器列表。 private ListOpenApiMethodFilter openApiMethodFilters;4.在使用的时候也有一些变化,我们分了三个组 对应了3个模块Tag(name /公共接口) RestController RequestMapping(/test) public class AccountController { Operation(summary 获取所有接口 default) GetMapping(/index) public String index(){ return Hello World; } } Tag(name 后端接口) RestController RequestMapping(value /api/admin) public class AdminController { Operation(summary 获取admin接口) GetMapping(value /index) public String index(){ return Hello Admin; } } Tag(name 前端接口) RestController RequestMapping(value /api/web) public class WebController { Operation(summary 获取前端接口) GetMapping(value /index) public String index(){ return Hello Web; } }5.这样就配置好分组信息以及接口信息了,访问localhost:8080/doc.html 就会出现如下图这样default默认分组web 分组admin 分组6.这样接口文档和接口分组就配置好了 在配置文件中(我一般用yml)也可以配置三.整合mybatis-plus,说实话新版的没太大的变化1.mybatis-plus 3.5.9 起分页插件已分离出来。如需使用则需单独引入依赖2.也就是说在使用这个版本的时候要多加一个依赖了dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-spring-boot3-starter/artifactId version${mybatis.plus.version}/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-jsqlparser/artifactId version${mybatis.plus.version}/version /dependency3.然后在配置文件中在进行配置就可以和以前一样了Configuration MapperScan(scan.your.mapper.package) public class MybatisPlusConfig { /** * 添加分页插件 */ Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加 // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType return interceptor; } }一款免费的在线文档格式转换工具在线文档转换