Я пробую kotlin в домашнем проекте с Spring webflux и проектным реактором.Я пытаюсь сделать блокирующий вызов базы данных H2, и поэтому я использую метод fromCallable, как рекомендовано.Насколько я понимаю, я предполагаю, что fromCallable должен обернуть любое возникшее исключение, которое затем может быть обработано с помощью doOnError, но вместо этого ошибка отображается непосредственно в консоли.
fun updateUser(req: ServerRequest): Mono<ServerResponse> =
req.bodyToMono(UserDto::class.java)
.flatMap { userDto -> updateUser(userDto) }
.flatMap { user -> ServerResponse.ok().syncBody(user!!) }
.doOnError { ServerResponse.notFound().build() }
fun updateUser(userDto: UserDto): Mono<User?> =
Mono.fromCallable {
val id = userDto.id.toLong()
userRepository.findByIdOrNull(id) ?:
throw IllegalArgumentException("No user found")
}.subscribeOn(Schedulers.elastic())
Если бы я попросил идентификатор, который не существует в моей базе данных, я бы ожидал 404 назад.Вместо этого я получаю 500 обратно из запроса и IllegalArgumentException прямо в мою консоль в IDE.Если кто-нибудь может сказать мне, почему это так, или иметь какую-либо информацию по этому поводу, это будет с благодарностью!