问题标签 [spring-webflux]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
11432 浏览

spring-webflux - 如何使用 Webflux 提供静态内容?

我正在学习 webflux,我想知道如何使用 webflux 在微服务上提供静态内容,但我没有找到相关信息。

0 投票
1 回答
2203 浏览

spring - 使用 Spring WebFlux Client 使用 REST Endpoint 时出错

我刚刚开始使用 Spring reactor 3 (WebFlux)。当尝试使用 WebClient 来使用 REST 端点以返回 Flux 时,我遇到了以下错误。

应用类:

构建.gradle

错误:

2017-05-01 22:20:29.718 WARN 14417 --- [ctor-http-nio-2] incAbstractChannelHandlerContext:用户处理程序的 exceptionCaught() 方法引发了异常“{}”[启用完整堆栈跟踪的调试级别]在处理以下异常时:

0 投票
6 回答
33906 浏览

java - 如何自定义 SpringWebFlux WebClient JSON 反序列化?

我正在使用spring-webflux WebClient (build 20170502.221452-172) 来访问一个 Web 应用程序,该应用程序生成一个Entry对象流 (application/stream+json),如下所示:

虽然Entry对象的反序列化对于使用标准通用类型(包括 java.time.Instant 等 Java 时间 (JSR-310) 数据类型)的 POJO 工作正常,但我想知道我必须做什么才能将任何自定义 JSON 添加到 Java 反序列化(例如,自定义 Jackson ObjectMapper)。

我在WebClient或其构建器和流式 API 生成的对象的类中找不到任何 API来执行此操作。

有没有人使用自定义反序列化的 WebClient ?

(也许 API 还不存在?)

0 投票
2 回答
8769 浏览

java - 项目反应堆组成 Flux.zip()

我一直在尝试用这个小应用程序学习 Project Reactor 3.0。我正在努力编写一个 Flux.zip() 函数来将变量组合到一个 Movie 对象。在 Reactor 中,返回类型似乎是Flux<Tuple5<>>. 在 RxJava2 中,它返回一个Function5<>.

RxJava2

反应堆

我不想返回 aFlux<Tuple5<>>我想返回 aTuple5<>或其他东西来创建电影,就像 RxJava 一样。我不想订阅元组,因为我试图在 Spring Web Reactive 中返回它。我通过订阅暂时解决了它,但我想知道是否可以像 RxJava 一样做。

此视频中时间戳为 1:07:54的示例表明它在旧版本中是可能的。

欢迎任何解决方案或建议!

0 投票
1 回答
11361 浏览

spring-webflux - 如何在spring-webflux中获取当前请求的上下文

在经典的 spring-mvc 中,可以在RequestContextHolder. 在此基础上,我们可以解析 a 中的传入请求HandlerInterceptorAdapter,设置请求参数,例如当前登录的用户、唯一请求 ID(用于日志关联)等。这些请求属性可以在请求的生命周期内从任何服务(不仅是控制器)静态检索。

我正在尝试用 spring-webflux 实现类似的东西。

我可以使用 aWebFilter来拦截所有传入的请求,获取当前的ServerWebExchange并在其上设置属性。ServerWebExchange但是,除了控制器方法之外,我看不到任何其他方法可以获取当前请求。

我正在寻找比传递ServerWebExchange(或ServerHttpRequest)更好的解决方案。

这似乎在 webflux 中很难实现,因为我们不能依赖在 ThreadLocal 上保存与特定请求相关的变量(由于非阻塞架构,单个线程可以在请求之间切换)。
尽管如此,这是一个重要的要求。也许有不同的方法?

0 投票
1 回答
8496 浏览

spring - 如何使用 WebClient 使用响应式 Spring Rest API

我需要在后端作业(可执行 jar)上使用反应性休息 API(使用 spring webflux 构建)。

我已经阅读了有关 Spring WebClient 的信息,但我不了解某些要点。

例如:

在最后一行,有一个“bodyToMono”。所以这就是我的问题:

如果调用的 Rest API 已经是响应式服务,我是否需要将响应转换为单声道?我有什么遗漏吗?

从我的角度来看,我认为可以有办法在代码中明确表示我的 Rest API 是反应式的,但可能是我不知道的事情。

0 投票
1 回答
3189 浏览

java - 如何使用 Spring WebClient 将嵌套的 JSON 数组反序列化为 Flux?

org.springframework.web.reactive.function.client.WebClient在 Spring Boot (2.0.0.M1) 应用程序中使用来查询返回嵌套数组的 REST 接口:

我现在正试图将此响应映射到一个Flux对象。为此,我进行了以下调用:

Result 类看起来像这样:

不幸的是,我收到以下错误:

谁能告诉我我做错了什么或告诉我一种更好的方法将这种响应反序列化为 Flux,最好以非阻塞方式?

0 投票
1 回答
4449 浏览

spring - 使用 Spring Webflux 返回元素列表

我正在尝试使用 Spring Webflux 创建一个简单的 CRUD 示例,但我陷入了一些概念。

我知道我可以在我的控制器请求映射方法中返回一个 Flux。但有时我想返回一个 404 状态,所以我可以在前端以某种方式处理。

我在官方文档中找到了一个使用 ServerResponse 对象的示例:

如您所见,即使返回的是一个列表 (Flux) o people, ServerResponse.ok.body 也会创建一个 Mono。

所以我的问题是:是这样吗?换句话说,我有没有 Flux 没关系,Spring 总是返回一个ServerResponse 的Mono(或其他类似的类)吗?

对于我的 404 状态,我可以使用类似的东西

但我正在以更流畅的方式思考。例如,我可以逐个元素地处理对象列表。

0 投票
1 回答
14042 浏览

java - onErrorResume 没有按预期工作

我正在尝试使用 WebFlux,但我看到了一个我不太理解的行为,我怀疑这是 WebFlux 或 Reactor 中的错误,但我需要确认。

我试图创建一个最小可重现的案例,其中包含一个非常简单的 HandlerFunction,它尝试返回 200 响应,但在创建主体期间抛出异常,然后尝试使用 onErrorResume 来代替返回 404 响应。

处理程序如下所示:

我希望在调用关联的端点时会得到 404 响应。相反,我看到的是带有日志消息的 500 响应,表明 Spring 认为在请求处理期间存在未处理的异常。

当我在 onErrorResume 内部设置断点时,我看到两个处理程序正在注册,一个是我在上面的方法中注册的,另一个是 Spring (在内部RouterFunctions.toHttpHandler)为ResponseStatusException. 然后在处理请求期间,我只看到第二个处理程序(由 Spring 注册的那个)被调用,与抛出的异常不匹配,然后落入根级处理程序。

据我所知,Spring 正在路由器级别覆盖 onErrorResume,以防止调用我在 Handler 中注册的那个。这是预期的行为吗?有没有更好的方法来完成我正在尝试的事情?

0 投票
0 回答
724 浏览

java - Spring Webflux Bean 验证

我有一个简单的休息控制器(使用 spring web-FLUX),它可以将 bean 保存在数据库中。但像往常一样,我想在保存之前验证它的一些字段。

在保存 bean 之前,我有一个要调用的验证方法。但是我怎样才能以更实用(和适当)的方式做到这一点?

我试过类似的东西:

但是方法validateBean没有被调用,只有当我做类似的事情时

我不知道订阅部分是否最正确(我相信不是),但我认为它有效,因为它是一种终端操作。我对吗?

即便如此,这并不能解决我的问题,因为当 bean出现问题时,我的验证方法会引发业务异常。这正是我想做的。

[编辑] 这是我的休息控制器,我会像这样:

我知道这不起作用,因为我的服务没有返回任何东西。但我不知道正确的方法是什么。所以我只是发布一个想法。感谢您的理解...

你们能给我一些帮助吗?