我有一个包含对象的 flux 请求。任务是创建(如果不存在)或更新(如果存在)这些对象。我已经尝试过实现这个目标,如下所示。
requestFlux.flatMap(entry -> {
Mono<Optional<MyObject>> existingMapping = myRepository
.findByIdAndName(entry.getId(), entry.getName());
return existingMapping.map(optional -> {
if (optional.isPresent()) {
MyObject model = MyObjectMapper.updateMyObject(entry, optional.get());
myRepository.save(model);
return model;
} else {
MyObject model = MyObjectMapper.toMyObjectModel(entry);
myRepository.save(model);
return model;
}
});
});
由于某些原因,这似乎没有工作。它没有抛出任何错误,没有创建updating记录,也没有记录ifelse里面存在的消息.想知道我漏掉的是什么?
你必须在一个变化中绑定所有的东西.不要打破链条.
public Mono<ServerResponse> createOrUpdateBulkMapping(ServerRequest serverRequest) {
Flux<RequestObjects> requestFlux = serverRequest.bodyToFlux(RequestObjects.class);
List<MyObjects> createdList = new ArrayList<>();
List<MyObjects> updatedList = new ArrayList<>();
return requestFlux
.flatMap(entry -> {
return myRepository.findByIdAndName(entry.getId(),entry.getName())
.flatMap(optional -> {
updatedList.add(entry);
MyObject model = MyObjectMapper.updateMyObject(entry, optional.get());
return myRepository.save(model);
})
.switchIfEmpty(saveNewModel(entry, createdList));
})
.then(ServerResponse.ok().body(Mono.just("Bulk Create/Update is successful").log(), String.class));
}
private Mono<MyObject> saveNewModel (RequestObjects entry, List<MyObjects> createdList) {
createdList.add(entry);
MyObject model = MyObjectMapper.toMyObjectModel(entry);
return myRepository.save(model);
}
被编辑了。 就像你在这里提供的要点一样: https:/gist.github.comvkrmsngh4313a8753848893a0f6988d8327f656220。 答非所问