在转换 Web 客户端响应时使用 FlatMap 相对于 Map 有什么优势?

问题描述 投票:0回答:1

我正在使用网络客户端使用第三方 REST API。我需要转换响应并异步返回结果而不阻塞。

我的理解是

flatMap 是异步的,map 是同步的。

在下面的代码片段中,我在方法1中使用了flatMap,在方法2中使用了map。

问题1:approach1是异步的吗?

问题2:这里异步(flatMap相对于map)有什么优势?我只是从响应中获取一个字段,然后在另一个对象中再次设置该字段并返回它。

@PostMapping(value = “/test”, produces = { “application/json” })
public ResponseEntity<Mono<MyResponse>> test(@RequestBody String input) {
Mono<ThirdPartyResponse> response = myutil.invokeWebClient(input);

//approach 1

final Mono<MyResponse> transformedResponse1 = response.flatMap(value -> {
    final MyResponse myResponse = new MyResponse();
    myResponse.setAccountNumber(value.getRoot().getMsgOut().getAcctNbr());
    return Mono.just(myResponse);
});

//approach 2

final Mono<MyResponse> transformedResponse2 = response.map(value -> {
    final MyResponse myResponse = new MyResponse();
    myResponse.setAccountNumber(value.getRoot().getMsgOut().getAcctNbr());
    return myResponse;
});
return ResponseEntity.status(HttpStatus.OK).body(transformedResponse1);
}
spring spring-webflux webclient spring-webclient flatmap
1个回答
0
投票

地图和平面地图的主要区别:

  1. map() 对流元素应用一对一转换,而 flatMap() 则执行一对多转换。
  2. map() 是同步的,确保所有项目都按照接收的顺序进行处理。 flatMap() 可以是异步的,但不能保证执行顺序遵循调用顺序。

有关Baeldung的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.