当前位置: 首页 > 知识库问答 >
问题:

Spring Webflux和可观察响应不工作

章飞章
2023-03-14

如果创建一个简单的@RestController并提供一个@GetMapping来返回一个Flux ,那么一切都能按照预期工作。

但是,如果我从flux更改为rxjava的observable,我会得到这个错误:

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

对代码进行了一些调试,我发现Jackson的ObjectMapper以某种方式在其typeFactory中注册了FluxMono和其余的反应类型,因此稍后的MappingJackson2HttpMessageConverter知道如何(去)序列化它们。

但是,当我使用observable时就不是这样了:我在ObjectMapper的类型工厂中找不到注册的observablesingle类型,因此我得到了前面提到的错误。

有人经历过这个问题吗?我错过了什么依赖吗?我需要手动告诉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));
}

共有1个答案

张鸿志
2023-03-14

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

<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 可观察性的相关功能 应用性能监控集成