я имел следующий совет контроллер настроен, чтобы вернуть контракт APIs для условий ошибки:Spring Загрузочный @ControllerAdvice обработчик исключений не стреляя
@ControllerAdvice
public class ExceptionHandler : ResponseEntityExceptionHandler()
{
@ExceptionHandler(Throwable::class)
@ResponseBody
public fun onException(ex: Throwable): ResponseEntity<ErrorResponse>
{
val errorResponse = ErrorResponse(
response = ResponseHeader(ex.responseCode(), ex.message))
return ResponseEntity(errorResponse, HttpStatus.UNAUTHORIZED);
}
}
Это было работает нормально, а затем перестал работать. Теперь все исключения направляются BasicErrorController
, который возвращает следующий формат:
{
"timestamp" : 1450495303166,
"status" : 403,
"error" : "Forbidden",
"message" : "Access Denied",
"path" : "/profile/candidates"
}
выше хорошая самоуверенная отправная точка, но теперь она не выйдет из пути.
- Я попытался заменить обработчики ошибок одним экземпляром
ExceptionHandlerExceptionResolver
, но это не сработало. - Я пробовал сделать свой собственный CustomErrorHandler, но это также не подходит, поскольку исходное исключение больше не находится в
HttpServletRequest
к тому времени, когда оно перенаправляется на пользовательский контроллер ошибок. Эта информация необходима для того, чтобы вернуть соответствующий ответ клиенту.
Как я:
- Сделать SpringBoot не исключения вперед к контроллеру исключений.
- Восстановить обработчики исключений @ControllerAdvice, чтобы я мог просто вернуть соответствующий орган ответа и код состояния.
На стартовых весенних журналах:
main] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in exceptionHandler
main] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in responseEntityExceptionHandler
Edit:
После прочтения через Spring загрузочных документы, я под стендом теперь, что BasicErrorController только предполагается уволить за какие-либо исключениями не, обработанный @ControllerAdvice
. Кажется, это не происходит. Итак, почему?
Я пробовал это, но не последовал за ним. Закончился с использованием подхода в моем ответе. Не уверен, что он хороший. –