Spring Webflux和Observable响应不起作用

时间:2017-03-12 14:45:04

标签: spring-mvc spring-boot rx-java spring-webflux

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

如果我创建一个简单的@RestController并提供只返回@GetMapping的{​​{1}},那么一切都按预期工作。

但是,如果我从Flux<String>更改为RxJava&#39; Flux,我会收到此错误:

Observable

通过代码调试了一下我发现Jackson的org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 以某种方式在其typeFactory中注册了ObjectMapperFlux和其他反应类型,所以稍后Mono 1}}知道如何(de) - 将它们序列化。

但是,当我使用MappingJackson2HttpMessageConverter时情况并非如此:我找不到在{{1}中注册的ObservableObservable类型我的类型工厂,所以我得到了上述错误。

有没有人遇到过这个问题?我错过任何依赖吗?我是否需要手动告诉Jackson如何(de)-serialize来自RxJava构造?但为什么杰克逊已经知道了Flux和Mono?

感谢您的帮助。

编辑:

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

Single

以下是我的控制器代码示例:

ObjectMapper

2 个答案:

答案 0 :(得分:3)

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

<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支持。

答案 1 :(得分:-6)

因此,FluxMono是Spring名称,因为Spring具有Not-Invented-Here综合症。

您可以注册执行转换为Spring知道的类型的处理程序,使用Jersey提供的AsyncResponse工具,或者在任何地方添加toBlocking。