gpt4 book ai didi

spring-mvc - Spring Webflux 和 Observable 响应不起作用

转载 作者:行者123 更新时间:2023-12-02 05:20:40 25 4
gpt4 key购买 nike

我刚刚使用版本为 2.0.0.BUILD-SNAPSHOT 的 spring-boot-starter-webflux 创建了一个简单的 Spring Boot 应用程序,它带来了 spring-webflux 版本 5.0.0.BUILD-SNAPSHOT 以及 Spring Core、Beans、Context等

如果我创建一个简单的 @RestController并提供 @GetMapping简单地返回一个 Flux<String> ,然后一切都按预期工作。

但是,如果我从 Flux 改变到 RxJava 的 Observable ,我得到这个错误:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation

通过代码调试了一下,我发现 Jackson 的 ObjectMapper以某种方式注册 Flux , Mono以及它的 typeFactory 中的其余 react 类型,所以稍后是 MappingJackson2HttpMessageConverter知道如何(反)序列化它们。

但是,当我使用 Observable 时情况并非如此: 我找不到类型 ObservableSingle注册于ObjectMapper的类型工厂,所以我得到了上述错误。

有人遇到过这个问题吗?我是否缺少任何依赖性?我是否需要手动告诉 Jackson 如何从 RxJava 构造中(反)序列化?但为什么 Jackson 已经知道 Flux 和 Mono?

感谢您的帮助。

已编辑:

我正在使用 RxJava 1.2.7。这是我的 pom.xml:

<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</dependency>
<!-- RxJava dependeencies -->
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
<version>1.2.7</version>
</dependency>
</dependencies>

这是我的 Controller 代码示例:

/**
* Get all the available tasks.
*
* @return the list of tasks
*/
@GetMapping(path = "/task")
@ResponseStatus(HttpStatus.OK)
public Observable<TaskView> allTasks(@AuthenticationPrincipal LoggedUserVO principal) {
return this.pocComponent.getAllTasks()
.map(t -> ViewConverter.convertFromTaskDocument(t, principal));
}

最佳答案

您可能缺少以下依赖项才能使其正常工作:

<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava-reactive-streams</artifactId>
<version>1.2.1</version>
</dependency>

各种 RxJava 1.x 版本的变化让我们很难立即支持它,这就是为什么我们更愿意依赖 official RxJava -> Reactive Streams adapter .请注意,无需额外的依赖项即可支持 RxJava 2.x(它原生构建于 Reactive Streams 之上)。

我要更新Spring WebFlux reference documentation指定它需要有 RxJava 1.x 支持。

关于spring-mvc - Spring Webflux 和 Observable 响应不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42748775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com