#java #reactive-programming #project-reactor
#java #реактивное программирование #проект-реактор
Вопрос:
Я пишу веб-сервер с широким использованием реактивного программирования. Я заметил, что слишком много раз забывал проверять, не является ли Mono
пустым. Я использую WebFlux, поэтому он преобразует пустое значение Mono
в 200 OK
ответ, и это очень затрудняет обнаружение этих ошибок.
Один из способов уменьшить количество этих ошибок — сделать отсутствие значения явным, используя Mono<Optional<T>>
вместо Mono.empty()
.
Это очень похоже на Optional
и null
debate, он даже использует тот же класс. И хотя есть много людей, которые выступают за использование Optional
, и это широко поддерживается библиотеками, я еще не видел, чтобы кто-нибудь использовал Mono<Optional<T>>
.
Есть ли какие-либо недостатки в использовании Mono<Optional<T>>
?
Какой лучший способ надежно обрабатывать случаи отсутствия значений?
Комментарии:
1. Это выглядит как
Optional<Optional<T>>
🙂
Ответ №1:
Используя Mono<Optional<T>>
вместо Mono<T>
Mono
, вы ставите себя в сложную ситуацию получения пустого Optional
файла, но предполагаете, что у него всегда будет экземпляр, поэтому на самом деле это не помогает, а только добавляет ненужное выделение.
Есть удобный оператор Mono#single, он выдаст ошибку, если вы ожидали непустое значение Mono
, но вместо этого получили пустое.