我正在使用网络客户端使用第三方 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);
}
地图和平面地图的主要区别:
有关Baeldung的更多信息。