Spring boot Spring webflux-多单声道
我不知道或问这个问题,除了这里,如果不是我道歉的地方 我目前正在使用SpringWebFlux开发一个应用程序,我在使用Mono和Flux时遇到了一个问题 这里我有一个REST请求,它附带了一个简单的bean,其中包含包括列表在内的属性。迭代此列表以使用返回Mono(findOne)的响应mongo调用。 但我认为我没有找到正确的方法:Spring boot Spring webflux-多单声道,spring-boot,reactive-programming,spring-webflux,Spring Boot,Reactive Programming,Spring Webflux,我不知道或问这个问题,除了这里,如果不是我道歉的地方 我目前正在使用SpringWebFlux开发一个应用程序,我在使用Mono和Flux时遇到了一个问题 这里我有一个REST请求,它附带了一个简单的bean,其中包含包括列表在内的属性。迭代此列表以使用返回Mono(findOne)的响应mongo调用。 但我认为我没有找到正确的方法: @PostMapping @RequestMapping("/check") public Mono<ContactCheckResponse> c
@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;
});
}
@PostMapping
@请求映射(“/check”)
公共Mono检查(@RequestBody列表){
最终ContactCheckResponse响应=新ContactCheckResponse();
回复:setRsnCode(“00”);
回复:setRspnCode(“0000”);
debug(“o-->person-check{}项”,list.size());
最终列表联系人=新的ArrayList();
响应。设置联系人(联系人);
返回Mono.fromCallable(()->{
list.stream().forEach(c->{
Boolean exists=contactRespository.findOneByThumbprint(c.getIdentification()).block()!=null;
ContactCheckResponse.Contact responseContact=新ContactCheckResponse.Contact();
responseContact.setExist(存在);
responseContact.setIdentifiant(c.getIdentifiant());
responseContact.setRsnCode(“00”);
responseContact.setRspnCode(“0000”);
response.getContacts().add(responseContact);
});
返回响应;
});
}
在我看来,必须制造一个积木的事实并不是“反应性”的概念,但我没有找到其他方法
有人能帮我找到完成这项任务的最佳方法吗
谢谢你以下几点:
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
以下内容:
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
.reduce(response,(r,c)->{r.getContacts().add(responseContact);return r;})@皮埃尔·伊夫·尼古拉斯不客气。是,返回r代码>更可取..reduce(response,(r,c)->{r.getContacts().add(responseContact);返回r;})@皮埃尔·伊夫·尼古拉斯不客气。是,返回r代码>更好。