我刚刚使用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中注册了ObjectMapper
,Flux
和其他反应类型,所以稍后Mono
1}}知道如何(de) - 将它们序列化。
但是,当我使用MappingJackson2HttpMessageConverter
时情况并非如此:我找不到在{{1}中注册的Observable
或Observable
类型我的类型工厂,所以我得到了上述错误。
有没有人遇到过这个问题?我错过任何依赖吗?我是否需要手动告诉Jackson如何(de)-serialize来自RxJava构造?但为什么杰克逊已经知道了Flux和Mono?
感谢您的帮助。
编辑:
我正在使用RxJava 1.2.7。这是我的pom.xml:
Single
以下是我的控制器代码示例:
ObjectMapper
答案 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)
因此,Flux
和Mono
是Spring名称,因为Spring具有Not-Invented-Here综合症。
您可以注册执行转换为Spring知道的类型的处理程序,使用Jersey提供的AsyncResponse工具,或者在任何地方添加toBlocking。