У меня есть GlobalExceptionHandler для перехвата всех сгенерированных исключений и возврата правильного кода возврата. Все работает, кроме случаев, когда возникает исключение OptimisticLockingFailureException, и я понятия не имею, почему это так.
GlobalExceptionHandler:
@Component
@Order(-2)
class GlobalExceptionHandler : WebExceptionHandler {
override fun handle(exchange: ServerWebExchange, throwable: Throwable): Mono<Void> = handleException(throwable)
.flatMap { it.writeTo(exchange, HandlerStrategiesResponseContext(HandlerStrategies.withDefaults())) }
.flatMap { Mono.empty<Void>() }
private fun handleException(ex: Throwable): Mono<ServerResponse> = when (ex) {
is EntityNotFoundException -> notFound(ex.message)
is InvalidRequestException,
is ReferenceKeyNotKnown,
is InvalidContractTypeException -> badRequest(ex.message)
is DuplicateKeyException,
is TransactionException,
is OptimisticLockingFailureException -> conflict(ex.message)
else -> errorResponse(HttpStatus.INTERNAL_SERVER_ERROR, ex.message)
}
private class HandlerStrategiesResponseContext(val strategies: HandlerStrategies) : ServerResponse.Context {
override fun viewResolvers(): MutableList<ViewResolver> = strategies.viewResolvers()
override fun messageWriters(): MutableList<HttpMessageWriter<*>> = strategies.messageWriters()
}
}
функции notFound, badRequest и errorResponse возвращают Mono с правильным кодом состояния и сообщением.
Кто-нибудь, кто может помочь мне и указать мне в правильном направлении, почему не вызывается исключение OptimistickLockingException?
Thx!