Spring-Web與Spring-WebFlux沖突問(wèn)題解決
問(wèn)題發(fā)現(xiàn)
創(chuàng)捷了Spring-Web項(xiàng)目,然后在學(xué)習(xí)Spring-WebFlux的時(shí)候代碼編寫(xiě)后請(qǐng)求解決報(bào)404,示例代碼如下:
@Component
public class MyHandler {
public Mono<ServerResponse> handleRequest(ServerRequest request) {
// 處理請(qǐng)求邏輯
String name = request.queryParam("name").orElse("Anonymous");
String message = "Hello, " + name + "!";
// 構(gòu)建響應(yīng)
return ServerResponse.ok().body(BodyInserters.fromValue(message));
}
}
@Configuration
@EnableWebFlux
public class MyWebFluxConfig {
@Bean
public RouterFunction<ServerResponse> route(MyHandler handler) {
return RouterFunctions.route()
.GET("/hello", handler::handleRequest)
.build();
}
}
pom依賴(lài)文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
啟動(dòng)成功后,請(qǐng)求如圖

然后進(jìn)行一系列的問(wèn)題排查
問(wèn)題解決
Spring MVC 和 Spring WebFlux 是兩個(gè)不同的框架,用于構(gòu)建 Web 應(yīng)用程序。由于這兩個(gè)框架之間的差異,建議一個(gè)項(xiàng)目只用一個(gè)框架。
請(qǐng)求404,先baidu,發(fā)現(xiàn)對(duì)這個(gè)問(wèn)題解決方案特別少,然后看網(wǎng)上別人的案例發(fā)現(xiàn)都有@EnableWebFlux注解,加上后啟動(dòng)一堆錯(cuò)誤來(lái)了。
一切的來(lái)源都是Spring MVC 和Spring WebFlux一起使用導(dǎo)致的,所以還是重新建一個(gè)項(xiàng)目再學(xué)習(xí)把。
問(wèn)題一:The bean ‘requestMappingHandlerMapping’, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],
完整錯(cuò)誤日志內(nèi)容:
The bean ‘requestMappingHandlerMapping’, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class] and overriding is disabled.
這個(gè)問(wèn)題就是說(shuō)requestMappingHandlerMapping的Bean重復(fù)了,但是全局搜索找不到這個(gè)bean,應(yīng)該是默認(rèn)自帶的。
再application.properties或application.yml文件中加入配置:
spring.main.allow-bean-definition-overriding=true
當(dāng)您的應(yīng)用程序啟動(dòng)時(shí),現(xiàn)有的bean定義將被新的定義所覆蓋。
問(wèn)題二:The Java/XML config for Spring MVC and Spring WebFlux cannot both be enabled, e.g. via @EnableWebMvc and @EnableWebFlux, in the same application.
看網(wǎng)上案例都有加@EnableWebFlux注解,以為是沒(méi)加注解導(dǎo)致訪問(wèn)404,加上后報(bào)錯(cuò):
Caused by: java.lang.IllegalStateException: The Java/XML config for Spring MVC and Spring WebFlux cannot both be enabled, e.g. via @EnableWebMvc and @EnableWebFlux, in the same application.
找到@EnableWebMvc注解,刪除后,重啟即可(其實(shí)不加注解也是可以請(qǐng)求的)。
問(wèn)題三:請(qǐng)求404
將上面的問(wèn)題都解決后,請(qǐng)求發(fā)現(xiàn)還是報(bào)404,然后就是再pom依賴(lài)文件中,刪除spring-web依賴(lài),重新編譯后重啟,發(fā)現(xiàn)依舊不行,最后發(fā)現(xiàn)SpringBoot可以知道應(yīng)用程序的Web應(yīng)用程序類(lèi)型:
在配置文件(如application.properties或application.yml)中,添加以下屬性:
spring.main.web-application-type = reactive
它有兩個(gè)可選值:
SERVLET:表示將應(yīng)用程序配置為使用傳統(tǒng)的Servlet API和阻塞I/O操作的Web堆棧。這是默認(rèn)值,適用于大多數(shù)傳統(tǒng)的Spring MVC應(yīng)用程序。
REACTIVE:表示將應(yīng)用程序配置為使用Reactive編程模型和非阻塞I/O操作的Web堆棧。這適用于使用Spring WebFlux構(gòu)建的響應(yīng)式應(yīng)用程序。
最后請(qǐng)求接口,如圖:

問(wèn)題解決。
總結(jié)
到此這篇關(guān)于Spring-Web與Spring-WebFlux沖突問(wèn)題解決的文章就介紹到這了,更多相關(guān)Spring-Web與Spring-WebFlux沖突內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)word轉(zhuǎn)pdf并在關(guān)鍵字位置插入圖片
這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)word轉(zhuǎn)pdf,并在word中關(guān)鍵字位置插入圖片,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
Spring WebSocket 404錯(cuò)誤的解決方法
這篇文章主要為大家詳細(xì)介紹了Spring WebSocket 404錯(cuò)誤的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
java 文件鎖的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了java 文件鎖的簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-07-07
SpringBoot配置文件啟動(dòng)加載順序的方法步驟
SpringBoot的啟動(dòng)加載順序涉及多個(gè)步驟和組件,通過(guò)分層和優(yōu)先級(jí)機(jī)制加載配置文件,確保在啟動(dòng)時(shí)正確配置應(yīng)用程序,本文就來(lái)介紹一下SpringBoot配置文件啟動(dòng)加載順序的方法步驟,感興趣的可以了解一下2024-11-11
SpringBoot統(tǒng)一響應(yīng)和統(tǒng)一異常處理詳解
在開(kāi)發(fā)Spring Boot應(yīng)用時(shí),處理響應(yīng)結(jié)果和異常的方式對(duì)項(xiàng)目的可維護(hù)性、可擴(kuò)展性和團(tuán)隊(duì)協(xié)作有著至關(guān)重要的影響,統(tǒng)一結(jié)果返回和統(tǒng)一異常處理是提升項(xiàng)目質(zhì)量的關(guān)鍵策略之一,所以本文給大家詳細(xì)介紹了SpringBoot統(tǒng)一響應(yīng)和統(tǒng)一異常處理,需要的朋友可以參考下2024-08-08
Java中使用注解校驗(yàn)手機(jī)號(hào)格式的詳細(xì)指南
在現(xiàn)代的Web應(yīng)用開(kāi)發(fā)中,數(shù)據(jù)校驗(yàn)是一個(gè)非常重要的環(huán)節(jié),本文將詳細(xì)介紹如何在Java中使用注解對(duì)手機(jī)號(hào)格式進(jìn)行校驗(yàn),感興趣的小伙伴可以了解下2025-03-03

