我是Spring Reactive框架的新手,正在尝试将Springboot 1.5.x代码转换为Springboot 2.0。我需要在经过一些过滤后返回响应头、主体和来自Spring 5 WebClient ClientResponse的状态代码。我不想使用块()方法,因为它会将其转换为同步调用。我可以很容易地使用bodyToMono获得responsebody。此外,我正在获得状态代码,header & body,如果我只是返回ClientResponse,但我需要根据statusCode & header参数处理响应。我尝试了subscribe,flatMap等,但没有任何效果。
例如-以下代码将返回响应Body
Mono<String> responseBody = response.flatMap(resp -> resp.bodyToMono(String.class));
但是类似的范例在获取statusCode和响应头时不起作用。有人能帮我使用Spring 5React式框架提取statusCode和响应头参数吗?
9条答案
按热度按时间jv2fixgn1#
您可以使用webclient的交换功能,例如:
然后你可以将bodyToMono等
kt06eoxx2#
我需要检查响应的细节(头,状态等)和身体以及。
我能够做到这一点的唯一方法是使用
.exchange()
和两个subscribe()
,如下面的示例所示:希望有帮助。如果有人知道更好的方法,请告诉我们。
6yt4nkrj3#
在Sping Boot 2.4.x / Spring 5.3之后,WebClient
exchange
方法被弃用,取而代之的是retrieve
,因此您必须使用ResponseEntity获取标头和响应状态,如下例所示:rekjcdws4#
如上所述,exchange已经过时了,所以我们使用retrieve(),这就是我在发出请求后返回代码的方式。
另一个选项,根据评论,我最近尝试过。这通常是建议异步调用,但我们可以使用它的两个。
lh80um4z5#
对于状态代码,您可以尝试以下操作:
对于标题:
rfbsl7qr6#
如果使用
WebClient
,您可以配置spring Boot 〉= 2.1.0来记录请求和响应:正如sprint Boot 文档中所描述的,如果您还希望记录头文件,则必须添加
但要注意,这可能会记录敏感信息。
ha5z0ras7#
rks48beu8#
可以使用
flatMap
从Mono
中提取对象egmofgnx9#
以MAP形式发送请求以MAP形式获取响应检查过滤器功能中的所有状态代码