[英]Spring webflux - multi Mono
如果不是我道歉的地方,除了这里,我不知道也不问这个问题。
我目前正在使用spring webflux开发应用程序,但在使用Mono和Flux时遇到问题。
在这里,我有一个REST请求,该请求带有一个简单的bean,其中包含包含列表的属性。 迭代此列表以使用响应式mongo调用,该调用返回一个Mono(findOne)。 但是我认为我没有找到正确的方法:
@PostMapping
@RequestMapping("/check")
public Mono<ContactCheckResponse> check(@RequestBody List<ContactCheckRequest> list) {
final ContactCheckResponse response = new ContactCheckResponse();
response.setRsnCode("00");
response.setRspnCode("0000");
LOG.debug("o--> person - check {} items", list.size());
final List<ContactCheckResponse.Contact> contacts = new ArrayList<>();
response.setContacts(contacts);
return Mono.fromCallable(() -> {
list.stream().forEach( c -> {
Boolean exists = contactRespository.findOneByThumbprint(c.getIdentifiant()).block() != null;
ContactCheckResponse.Contact responseContact = new ContactCheckResponse.Contact();
responseContact.setExist(exists);
responseContact.setIdentifiant(c.getIdentifiant());
responseContact.setRsnCode("00");
responseContact.setRspnCode("0000");
response.getContacts().add(responseContact);
});
return response;
});
}
在我看来“必须采取行动”的事实并不是“反应”,但我没有找到其他方法。
有人可以帮我找到执行此任务的最佳方法吗?
谢谢
遵循以下原则:
return Flux.fromIterable(list)
.flatMap(c -> contactRespository.findOneByThumbprint(c.getIdentifiant())
.map(r -> r != null)
.map(exists -> {
ContactCheckResponse.Contact responseContact = new ContactCheckResponse.Contact();
...
return responseContact;
})
)
.reduce(response, (r,c) -> {
response.getContacts().add(responseContact);
return response;
});
从列表中创建Flux
,为每个条目创建一个联系人,并将所有内容简化为Mono
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.