Spring-Web與Spring-WebFlux沖突問(wèn)題解決
問(wèn)題發(fā)現(xiàn)
創(chuàng)捷了Spring-Web項(xiàng)目,然后在學(xué)習(xí)Spring-WebFlux的時(shí)候代碼編寫后請(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依賴文件
<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注解,以為是沒加注解導(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依賴文件中,刪除spring-web依賴,重新編譯后重啟,發(fā)現(xiàn)依舊不行,最后發(fā)現(xiàn)SpringBoot可以知道應(yīng)用程序的Web應(yīng)用程序類型:
在配置文件(如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中MultipartFile互轉(zhuǎn)File的方法
本文主要介紹了java中MultipartFile互轉(zhuǎn)File的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Java List的remove()方法陷阱以及性能優(yōu)化
Java List在進(jìn)行remove()方法是通常容易踩坑,本文就詳細(xì)的介紹一下陷阱以及性能優(yōu)化,感興趣的可以了解一下2021-10-10
springboot Validated失效的問(wèn)題及解決思路
文章主要介紹了Java Bean Validation(JSR 303/JSR 349)和Hibernate Validator的基本用法,包括常用注解的使用、@Valid和@Validated注解的區(qū)別、如何自定義校驗(yàn)注解以及如何在Spring Boot中使用這些校驗(yàn)機(jī)制2026-01-01
使用HandlerMethodArgumentResolver用于統(tǒng)一獲取當(dāng)前登錄用戶
這篇文章主要介紹了使用HandlerMethodArgumentResolver用于統(tǒng)一獲取當(dāng)前登錄用戶實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
解決Intellij IDEA 使用Spring-boot-devTools無(wú)效的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決Intellij IDEA 使用Spring-boot-devTools無(wú)效的問(wèn)題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
使用IDEA搭建SSM框架的詳細(xì)教程(spring + springMVC +MyBatis)
這篇文章主要介紹了使用IDEA搭建SSM框架的詳細(xì)教程 spring + springMVC +MyBatis,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
掌握SpringMVC中@InitBinder的實(shí)際應(yīng)用
這篇文章主要介紹了掌握SpringMVC中@InitBinder的實(shí)際應(yīng)用,@InitBinder是Spring MVC框架中的一個(gè)注解,用于自定義數(shù)據(jù)綁定的方法,通過(guò)在控制器中使用@InitBinder注解,可以將特定的數(shù)據(jù)綁定邏輯應(yīng)用于請(qǐng)求參數(shù)的處理過(guò)程中,需要的朋友可以參考下2023-10-10

