Я начинаю исследовать реактивный мир.В своем микросервисном проекте я использую Project Reactor и реактивный репозиторий Cassandra.
Я написал простой метод обработчика DELETE: я получаю пользователя по идентификатору, проверим, является ли он DELETED
(фильтр по статусу) и:
- , если он помечен как
DELETED
затем верните notFound()
(не можете удалить пользователя, помеченного DELETED
) - в противном случае: пометьте его как
DELETED
и обновите объект
Проблема в том, что обновление не является базой данныхизменить (даже если метод в хранилище был выполнен).Что может вызвать такое странное поведение?
Вот мой код:
@Override
public Mono<ServerResponse> handle(ServerRequest serverRequest) {
String userId = serverRequest.pathVariable(PATH_PARAM_ID);
return Mono.just(userId)
.map(casandraRepository::findById)
.flatMap(detailsMono -> detailsMono.filter(details -> !details.getDeleted()))
.map(this::getResponsePayload)
.defaultIfEmpty(notFound().build())
.flatMap(serverResponseMono -> serverResponseMono);
}
private Mono<ServerResponse> getResponsePayload(User details){
User markedDetails = details.toBuilder().deleted(Boolean.TRUE).build();
casandraRepository.save(markedDetails);
return noContent().build();
}