Swagger | 解决Springboot2.x/3.x不兼容和依赖报错等问题

 目录

不兼容报错提醒

1. 修改Spring Boot版本

2. 修改application.yml配置文件

3. 使用其他替代方案

 依赖兼容

配置 Yaml 文件

 依赖报错提醒

解决方法

1. 选择一个库

2. 移除springfox依赖

3. 添加springdoc依赖

4. 配置springdoc

5. 清理项目

6. 启动项目

示例代码

application.yml配置

pom.xml依赖

SwaggerConfig配置类(可选)

无法显示swagger页面

1. 检查依赖是否正确加载

2. 检查Spring Boot的静态资源路径

3. 检查Swagger UI的路径

4. 检查是否有其他Spring Security配置

5. 检查是否有其他Servlet或DispatcherServlet配置

6. 检查是否有其他静态资源冲突

7. 检查是否有其他中间件或代理配置

8. 检查日志输出

9. 尝试访问其他Swagger UI路径

10. 检查是否有其他错误


不兼容报错提醒

org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerExceptionat org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.23.jar:5.3.23]at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.23.jar:5.3.23]at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.23.jar:5.3.23]at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.23.jar:5.3.23]at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.23.jar:5.3.23]at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.23.jar:5.3.23]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.23.jar:5.3.23]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.13.jar:2.6.13]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:745) ~[spring-boot-2.6.13.jar:2.6.13]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:420) ~[spring-boot-2.6.13.jar:2.6.13]at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-2.6.13.jar:2.6.13]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317) ~[spring-boot-2.6.13.jar:2.6.13]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.6.13.jar:2.6.13]at com.jkglxt.www.HealthManagementSystemApplication.main(HealthManagementSystemApplication.java:12) ~[classes/:na]
Caused by: java.lang.NullPointerException: nullat springfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWrapper.java:56) ~[springfox-spring-webmvc-3.0.0.jar:3.0.0]at springfox.documentation.RequestHandler.sortedPaths(RequestHandler.java:113) ~[springfox-core-3.0.0.jar:3.0.0]at springfox.documentation.spi.service.contexts.Orderings.lambda$byPatternsCondition$3(Orderings.java:89) ~[springfox-spi-3.0.0.jar:3.0.0]at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469) ~[na:na]at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:na]at java.base/java.util.TimSort.sort(TimSort.java:234) ~[na:na]at java.base/java.util.Arrays.sort(Arrays.java:1515) ~[na:na]at java.base/java.util.ArrayList.sort(ArrayList.java:1750) ~[na:na]at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:392) ~[na:na]at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) ~[na:na]at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]at springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider.requestHandlers(WebMvcRequestHandlerProvider.java:81) ~[springfox-spring-webmvc-3.0.0.jar:3.0.0]at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) ~[na:na]at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.withDefaults(AbstractDocumentationPluginsBootstrapper.java:107) ~[springfox-spring-web-3.0.0.jar:3.0.0]at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.buildContext(AbstractDocumentationPluginsBootstrapper.java:91) ~[springfox-spring-web-3.0.0.jar:3.0.0]at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.bootstrapDocumentationPlugins(AbstractDocumentationPluginsBootstrapper.java:82) ~[springfox-spring-web-3.0.0.jar:3.0.0]at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:100) ~[springfox-spring-web-3.0.0.jar:3.0.0]at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.23.jar:5.3.23]... 14 common frames omitted

你遇到的Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException错误,通常是由于Spring Boot版本与Swagger版本不兼容导致的。以下是一些解决方案:

1. 修改Spring Boot版本

降低你的Spring Boot版本到2.5及以下,就不再会出现上述的问题。

2. 修改application.yml配置文件

application.yml文件中添加以下配置,以解决Spring Boot 2.6.x版本与Swagger 3.0.0的兼容性问题:

spring:mvc:pathmatch:matching-strategy: ant_path_matcher

如果使用的是application.properties文件,则添加以下配置:

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

3. 使用其他替代方案

可以考虑使用springdoc-openapi-ui作为替代方案。它是一个基于Spring Boot的OpenAPI实现,与Spring Boot 2.6.x和3.x版本兼容性较好。在pom.xml中添加以下依赖:

 依赖兼容

依赖二选一即可

<!--        生成接口文档-->
<!--        <dependency>-->
<!--            <groupId>io.springfox</groupId>-->
<!--            <artifactId>springfox-boot-starter</artifactId>-->
<!--            <version>3.0.0</version>-->
<!--        </dependency>--><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.11</version></dependency><dependency>

 

配置 Yaml 文件

springdoc:swagger-ui:path: /swagger-ui.html
spring:mvc:static-path-pattern: /**pathmatch:matching-strategy: ant_path_matcher

 依赖报错提醒

java.lang.IllegalStateException: Ambiguous handler methods mapped for '/v3/api-docs': {public org.springframework.http.ResponseEntity springfox.documentation.oas.web.OpenApiControllerWebMvc.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest), public java.lang.String org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(javax.servlet.http.HttpServletRequest,java.lang.String,java.util.Locale) throws com.fasterxml.jackson.core.JsonProcessingException}at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:432) ~[spring-webmvc-5.3.23.jar:5.3.23]at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:383) ~[spring-webmvc-5.3.23.jar:5.3.23]at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:125) ~[spring-webmvc-5.3.23.jar:5.3.23]at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:67) ~[spring-webmvc-5.3.23.jar:5.3.23]at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:498) ~[spring-webmvc-5.3.23.jar:5.3.23]at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1265) ~[spring-webmvc-5.3.23.jar:5.3.23]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1047) ~[spring-webmvc-5.3.23.jar:5.3.23]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) ~[spring-webmvc-5.3.23.jar:5.3.23]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.23.jar:5.3.23]at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.23.jar:5.3.23]at javax.servlet.http.HttpServlet.service(HttpServlet.java:670) ~[tomcat-embed-core-9.0.68.jar:4.0.FR]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.23.jar:5.3.23]at javax.servlet.http.HttpServlet.service(HttpServlet.java:779) ~[tomcat-embed-core-9.0.68.jar:4.0.FR]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.68.jar:9.0.68]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.23.jar:5.3.23]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.23.jar:5.3.23]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.23.jar:5.3.23]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.23.jar:5.3.23]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.23.jar:5.3.23]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.23.jar:5.3.23]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.68.jar:9.0.68]at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

这个错误表明在你的Spring Boot项目中,/v3/api-docs 路径被多个处理器方法映射,导致了冲突。这通常是由于同时引入了 springfoxspringdoc 两个库,它们都试图处理这个路径,从而导致了冲突。

解决方法

1. 选择一个库

建议选择一个库来生成API文档。springdoc 是目前更推荐的库,因为它与Spring Boot 2.6.x和3.x版本的兼容性更好。

2. 移除springfox依赖
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>
3. 添加springdoc依赖

pom.xml中添加springdoc的依赖:

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.11</version>
</dependency>
4. 配置springdoc

application.ymlapplication.properties中添加以下配置,以解决Spring Boot 2.6.x版本与springdoc的兼容性问题:

spring:mvc:pathmatch:matching-strategy: ant_path_matcher

或者在application.properties中:

spring.mvc.pathmatch.matching-strategy=ant_path_matcher
5. 清理项目

清理并重新构建项目,以确保所有依赖都正确加载:

mvn clean install
6. 启动项目

启动项目后,访问 http://localhost:8080/swagger-ui/index.html,你应该能够看到Swagger UI界面。

示例代码

application.yml配置
spring:mvc:pathmatch:matching-strategy: ant_path_matcher
pom.xml依赖
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.11</version>
</dependency>
SwaggerConfig配置类(可选)

如果你需要自定义Swagger文档的标题、描述等信息,可以创建一个配置类:

import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SwaggerConfig {@Beanpublic GroupedOpenApi publicApi() {return GroupedOpenApi.builder().group("public").pathsToMatch("/api/**").build();}
}

无法显示swagger页面

如果在访问 http://localhost:8080/swagger-ui/index.html 时没有看到Swagger UI界面

1. 检查依赖是否正确加载

确保springdoc-openapi-ui依赖已经正确添加到pom.xml中,并且没有冲突的依赖。例如:

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.11</version>
</dependency>

运行以下命令来清理并重新构建项目:

mvn clean install

2. 检查Spring Boot的静态资源路径

默认情况下,Spring Boot会将/swagger-ui/index.html映射到Swagger UI的静态资源路径。确保你的Spring Boot应用没有覆盖默认的静态资源路径。

application.propertiesapplication.yml中,确保没有覆盖spring.mvc.static-path-pattern属性。如果有,可以尝试将其设置为默认值:

spring.mvc.static-path-pattern=/**

3. 检查Swagger UI的路径

默认情况下,Swagger UI的路径是/swagger-ui/index.html。如果你使用的是springdoc,可以通过以下配置自定义路径:

springdoc.swagger-ui.path=/swagger-ui.html

然后访问http://localhost:8080/swagger-ui.html

4. 检查是否有其他Spring Security配置

如果你的项目中使用了Spring Security,可能需要为Swagger UI的路径添加访问权限。例如:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll() // 允许访问Swagger UI和API文档.anyRequest().authenticated().and().formLogin().permitAll().and().logout().permitAll();}
}

5. 检查是否有其他Servlet或DispatcherServlet配置

如果你的项目中自定义了ServletDispatcherServlet,可能会影响Swagger UI的路径映射。确保没有其他配置覆盖了Swagger UI的默认路径。

6. 检查是否有其他静态资源冲突

如果你的项目中自定义了静态资源路径,可能会与Swagger UI的路径冲突。确保没有其他静态资源覆盖了/swagger-ui/index.html路径。

7. 检查是否有其他中间件或代理配置

如果你的项目部署在某个中间件或代理服务器后面,可能需要确保中间件或代理服务器正确转发了/swagger-ui/index.html路径。

8. 检查日志输出

启动项目时,查看日志输出,确认Swagger UI的静态资源是否被正确加载。例如,你可能会看到类似以下的日志:

Mapped URL path [/swagger-ui/index.html] onto handler of type [class org.springdoc.webmvc.ui.SwaggerIndexTransformer]

如果没有看到类似的日志,可能表示Swagger UI的静态资源没有被正确加载。

9. 尝试访问其他Swagger UI路径

除了/swagger-ui/index.html,还可以尝试访问以下路径:

  • http://localhost:8080/swagger-ui.html

  • http://localhost:8080/v3/api-docs

如果能够访问到/v3/api-docs,说明Swagger的API文档已经生成,但Swagger UI可能没有正确加载。

10. 检查是否有其他错误

查看项目启动时的完整日志,确认是否有其他错误导致Swagger UI无法加载。例如,可能存在某些依赖冲突或配置错误。


- Thank you -

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++默认构造函数、普通构造函数、拷贝构造、移动构造、委托构造及析构函数深度解析

目录 一、默认构造函数&#xff08;Default Constructor&#xff09;二、普通构造函数&#xff08;General Constructor&#xff09;三、拷贝构造函数&#xff08;Copy Constructor&#xff09;四、移动构造函数&#xff08;Move Constructor&#xff0c;C11&#xff09;五、委…

JVM 深度解析

一、JVM 概述 1.1 什么是 JVM&#xff1f; JVM&#xff08;Java Virtual Machine&#xff0c;Java 虚拟机&#xff09;是 Java 程序运行的核心引擎。它像一个“翻译官”&#xff0c;将 Java 字节码转换为机器能理解的指令&#xff0c;并管理程序运行时的内存、线程等资源。 …

OpenCV CUDA 模块图像过滤-----创建一个计算图像导数的滤波器函数createDerivFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::createDerivFilter 是 OpenCV CUDA 模块中的一个工厂函数&#xff0c;用于创建一个计算图像导数的滤波器。这个滤波器可以用来计算图像…

Spring Boot 接口开发实战指南

Spring Boot 接口开发实战指南 一、基础接口开发步骤 1.1 添加必要依赖 <!-- pom.xml --> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></depen…

题目 3325: 蓝桥杯2025年第十六届省赛真题-2025 图形

题目 3325: 蓝桥杯2025年第十六届省赛真题-2025 图形 时间限制: 2s 内存限制: 192MB 提交: 494 解决: 206 题目描述 小蓝要画一个 2025 图形。图形的形状为一个 h w 的矩形&#xff0c;其中 h 表示图形的高&#xff0c;w 表示图形的宽。当 h 5,w 10 时&#xff0c;图形如下所…

UML 时序图 使用案例

UML 时序图 UML 时序图 (Sequence Diagram)时序图的主要元素消息类型详解时序图示例时序图绘制步骤时序图的应用场景 UML 时序图 (Sequence Diagram) 时序图是UML(统一建模语言)中用于展示对象之间交互行为的动态视图&#xff0c;它特别强调消息的时间顺序。 时序图的主要元素…

PPT连同备注页(演讲者模式)一块转为PDF

首先&#xff0c;进入创建PDF/XPS&#xff1a; 然后进入选项&#xff1a; 发布选项-发布内容里选备注页&#xff1a; 导出的原始结果是这样的&#xff1a; 这个时候裁剪一下&#xff0c;范围为所有页面&#xff1a; 最终结果&#xff1a; 如果导出不选“备注页”而是只勾选“包…

AI时代新词-多模态(Multimodal)

一、什么是多模态&#xff08;Multimodal&#xff09;&#xff1f; 多模态&#xff08;Multimodal&#xff09;是指在人工智能中&#xff0c;融合多种不同类型的信息&#xff08;如文本、图像、语音、视频等&#xff09;进行处理和分析的技术。与传统的单一模态&#xff08;例…

【图像大模型】Stable Diffusion XL:下一代文本到图像生成模型的技术突破与实践指南

Stable Diffusion XL&#xff1a;下一代文本到图像生成模型的技术突破与实践指南 一、架构设计与技术演进1.1 核心架构革新1.2 关键技术突破1.2.1 双文本编码器融合1.2.2 动态扩散调度 二、系统架构解析2.1 完整生成流程2.2 性能指标对比 三、实战部署指南3.1 环境配置3.2 基础…

图像分割技术的实现与比较分析

引言 图像分割是计算机视觉领域中的一项基础技术&#xff0c;其目标是将数字图像划分为多个图像子区域&#xff08;像素的集合&#xff09;&#xff0c;以简化图像表示&#xff0c;便于后续分析和理解。在医学影像、遥感图像分析、自动驾驶、工业检测等众多领域&#xff0c;图…

摩尔线程S4000国产信创计算卡性能实战——Pytorch转译,多卡P2P通信与MUSA编程

简介 MTT S4000 是基于摩尔线程曲院 GPU 架构打造的全功能元计算卡&#xff0c;为千亿规模大语言模型的训练、微调和推理进行了定制优化&#xff0c;结合先进的图形渲染能力、视频编解码能力和超高清 8K HDR 显示能力&#xff0c;助力人工智能、图形渲染、多媒体、科学计算与物…

「从0到1」构建工业物联网监控系统:ARM+Quarkus+Prometheus技术栈全记录

在工业4.0浪潮中&#xff0c;边缘计算正成为智能制造的核心基础设施。ARM架构边缘计算机凭借其低功耗、高能效比和模块化设计优势&#xff0c;正在重塑工业物联网&#xff08;IIoT&#xff09;的监控体系。当Java的跨平台能力与Prometheus的实时监控体系相结合&#xff0c;为工…

【HW系列】—web常规漏洞(文件上传漏洞)

文章目录 一、简介二、危害三、文件检测方式分类四、判断文件检测方式五、文件上传绕过技术六、漏洞防御措施 一、简介 文件上传漏洞是指Web应用程序在处理用户上传文件时&#xff0c;未对文件类型、内容、路径等进行严格校验和限制&#xff0c;导致攻击者可上传恶意文件&…

如何设计ES的冷热数据分离架构?Elasticsearch 集群如何实现高可用?如何避免脑裂问题?如果出现脑裂如何恢复?

以下为Elasticsearch架构设计与高可用方案详细说明&#xff1a; 冷热架构 一、冷热数据分离架构设计&#xff08;文字描述模拟架构图&#xff09; [Hot Layer] │ ├─ SSD节点组&#xff08;3节点&#xff09; │ ├─ 角色&#xff1a;ingest/data/hot │ ├─ 存…

Trivy 镜像漏洞扫描:从零入门到实战指南

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——手把手带你掌握容器安全核心工具 一、安装配置&#xff1a;三步完成 Trivy 部署 Trivy 是由 Aqua Security 开发的开源容器安全工具&#xff0c;支持…

SQL基础概念以及SQL的执行方式

1. SQL入门 1.1. SQL语言功能 可以把 SQL 语言按照功能划分成以下的 4 个部分&#xff1a; DDL&#xff0c;英文叫做 Data Definition Language&#xff0c;也就是数据定义语言&#xff0c;它用来定义我们的数据库对象&#xff0c;包括数据库、数据表和列。通过使用 DDL&…

Rust 1.0 发布十周年,梦想再度扬帆起航!

目录 引言&#xff1a;发布十周年&#xff0c;锋芒露今朝 一、Rust的诞生&#xff1a;源于安全的初心 二、Rust 1.0&#xff1a;十年耕耘&#xff0c;硕果累累 三、核心利器&#xff1a;安全、并发与性能的十年锤炼 四、生态与应用&#xff1a;十年拓展&#xff0c;遍地开…

x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力

一、引言 汇编语言是硬件与软件的桥梁&#xff0c;x86 和 ARM 作为两大主流架构&#xff0c;其汇编语言在设计理念、指令集、编程风格上差异显著。本文以 x86 汇编为核心&#xff0c;结合与 ARM 的对比&#xff0c;解析 x86 汇编的技术细节与应用场景&#xff0c;助力开发者深…

入驻面包多了

前言 入驻面包多了&#xff0c;其实已经开通面包多账号老久了&#xff0c;一直没有认证&#xff0c;因为没什么拿得出手的作品。 后边会努力沉淀&#xff0c;希望能出一些作品&#xff0c;给大家带来一些帮助&#xff0c;然后能赚到一些些奶茶钱。 一个小工具 上架了一个Win…

Python----目标检测(MS COCO数据集)

一、MS COCO数据集 COCO 是一个大规模的对象检测、分割和图像描述数据集。COCO有几个 特点&#xff1a; Object segmentation&#xff1a;目标级的分割&#xff08;实例分割&#xff09; Recognition in context&#xff1a;上下文中的识别&#xff08;图像情景识别&#xff0…