Java Spring Webflux — вставка пустого монорезультата фильтра?

#java #spring-webflux

#java #spring-webflux

Вопрос:

Пожалуйста, небольшой вопрос: имеет ли смысл сохранять пустой Mono, под этим я подразумеваю результат фильтрации на Mono, в реактивную базу данных, пожалуйста?

Небольшой пример:

         // step 1 - from some Mono, compute my pojo
        final Mono<MyPojo> myPojoMono = getSomeMonoAndConvertToMyPojo();

        // step 2 - based on a predicate, some myPojo are invalid, I do not want to save them, but some are valid, I need to persist them!
        final Mono<MyPojo> validMyPojoMono = myPojoMono.filter(oneMyPojo -> computeIsValidMyPojo(oneMyPojo));

        // step 3 - for those who are valid only, I want to persist them. BTW, should I use something else other than .insert(Publisher) which strangely, returns a flux?
        final Flux<PdsResponse> whyFlux  = myReactiveRepository.insert(validMyPojoMono);
        return whyFlux;

 

После шага 2, если предикат не совпадает, (не уверен) результатом будет пустой mono.

Следовательно, имеет ли смысл вызывать API сохранения для пустого mono, пожалуйста?

Каков подходящий способ достижения этого варианта использования, пожалуйста?

Спасибо

Комментарии:

1. почему бы тебе просто не попробовать, прежде чем спрашивать?

2. Почему ты думаешь, что я не пытался?

Ответ №1:

Ваш код является своего рода синхронизацией, и я не уверен, имеет ли это смысл.

Я бы сделал так

 final Mono<MyPojo> myPojoMono = getSomeMonoAndConvertToMyPojo()
    .filter(oneMyPojo -> computeIsValidMyPojo(oneMyPojo));
    .flatMap(validMyPojoMono-> reactiveRepository.insert(validMyPojoMono));
 

Дело в том, что если после filter того, как вы получите пустой mono, он не будет сохраняться, что имеет смысл для меня.