Учитывая: У меня есть служба, которая производит Flowable<T>
.Это Flowable<T>
может быть пустым.
У меня есть контроллер, который выглядит примерно так:
@Controller("/api}")
class ApiController constructor( private val myService: MyService) {
@Get("/")
@Produces(MediaType.APPLICATION_JSON)
fun getSomething(): Flowable<T> {
return myService.get()
}
}
Чего я хочу достичь: когда текучий объект пуст -> бросить HttpStatusException(404)
.
В противном случае вернуть потоковое с данными внутри.
То, что я уже пробовал
Я пробовал различные комбинации следующих операторов RxJava:
- doOnError
- onErrorResumeNext
- onErrorReturn
- switchIfEmpty
- ...
Что я испытал
Ни один из вариантов не выдал 404 в Браузере / Почтальоне.
Несколько вариантов просто ничего не делают.Это означает, что страница не загружается в браузере.
Другие параметры - это создание "OK" (200) ответов с пустыми телами.
А некоторые - CompositeException
...
У кого-нибудь есть подсказка для меня?
Обновление : как предложено:
@Controller("/api")
class HelloController {
@Get("/")
@Produces(MediaType.APPLICATION_JSON)
fun get(): Flowable<String> {
return Flowable.empty<String>()
.switchIfEmpty {
it.onError(HttpStatusException(HttpStatus.NOT_FOUND,""))
}
}
}
При вызове я получаю следующеес firefox:
HttpResponseStatus: 200
HttpContent: [
Yes, the closing bracet is missing!