如果创建一个简单的@RestController
并提供一个@GetMapping
来返回一个Flux
,那么一切都能按照预期工作。
但是,如果我从flux
更改为rxjava的observable
,我会得到这个错误:
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
对代码进行了一些调试,我发现Jackson的ObjectMapper
以某种方式在其typeFactory中注册了Flux
、Mono
和其余的反应类型,因此稍后的MappingJackson2HttpMessageConverter
知道如何(去)序列化它们。
但是,当我使用observable
时就不是这样了:我在ObjectMapper
的类型工厂中找不到注册的observable
或single
类型,因此我得到了前面提到的错误。
有人经历过这个问题吗?我错过了什么依赖吗?我需要手动告诉Jackson如何从RxJava构造中(去)序列化吗?但是为什么杰克逊已经知道Flux和Mono了呢?
谢谢你的帮助。
我使用的是RXJava1.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>
下面是我的控制器代码示例:
/**
* 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>
各种RXJava1.x版本的变化使我们很难支持它,这就是为什么我们更喜欢依赖官方的RXJava->Reactive Streams适配器。请注意,RXJava2.x不需要额外的依赖关系就被支持(它本机构建在反应流之上)。
我将更新Spring WebFlux参考文档,指定这是RXJava1.x支持所必需的。
问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首
我试图理解当我使用 在或之后,在我使用时返回true 我知道是一次性的。isDisposed()返回false。有人能解释一下到底发生了什么吗?。我理解一个写得很好的观察。create不能在onComplete()或onError()之后发出项。
是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?
我发现了这个例子: 但是我不明白为什么我们需要和?和方法是用于什么?
我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从
导览 本小节主要介绍 Apache ShardingSphere 可观察性的相关功能 应用性能监控集成