У меня есть приложение Spring Boot, которое запускает Netty для REST API.
У меня есть WebExceptionHandler для обработки исключений, которые могут возникнуть, и это работает. Он строит соответствующие ответы и отправляет их.
Проблема в том, что она также регистрирует исключение как ошибку. Я хочу изменить это, чтобы вместо этого регистрировать это как информацию (потому что у нас есть отслеживание и оповещения, которые работают по-разному на основе информации или ошибки). Он даже регистрирует ошибки типа 404.
Кажется, что exceptionCaught
в ChannelInboundHandler
помогло бы, но exceptionCaught
устарело. Я не могу найти ничего, что не использует этот метод, и я не могу найти ничего, ссылающегося на то, что (если что-нибудь) заменило его).
Я также пытался использовать @ControllerAdvice
или @RestControllerAdvice
с @ExceptionHandler
, но это никогда не вызывалось.
Как правильно перехватить и обработать запись исключения?
Минимальный пример реализации нашей текущей установки выглядит следующим образом:
@RestController
class MyController {
@RequestMapping(method = [GET], value = ["endpoint"], produces = [APPLICATION_JSON_VALUE])
fun myEndpoint(): Mono<MyResponse> = createResponse()
}
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
class MyWebExceptionHandler : WebExceptionHandler {
// This does get called and sends the appropriate response back, but an error is logged somewhere outside of our code.
override fun handle(exchange: ServerWebExchange, ex: Throwable): Mono<Void> =
createErrorResponse();
}
// Tried using both, or just one at a time, no difference.
// It does get created.
@ControllerAdvice
@RestControllerAdvice
class MyExceptionHandler {
// Never called
@ExceptionHandler(Exception::class)
fun handle(ex: Exception) {
log.error(ex.message)
}
}