Обработчик исключений не работает с `spring-boot-starter-data-rest`

Мой последний опыт Java / Spring был около четырех лет назад. Я начал изучать Spring Boot с Kotlin.

Я создал веб-сервис RESTful (в Котлине), как это, и он отлично работает:

@RequestMapping("/authorization") public fun authorization(@RequestParam(value = "network-type", defaultValue = "Facebook") name: String, @RequestParam(value = "oauth-token") oauthToken: String, @RequestParam(value = "oauth-token-secret", required = false) oauthTokenSecret: String?): Authorization { //TODO: Handle other social network types return facebookAuth.authorization(oauthToken) } 

Теперь у меня возникли проблемы с добавлением обработчика исключений, когда facebookAuth выбрасывает UnauthorizedException.

Что я пробовал:

  • Я попытался зарегистрировать метод обработчика исключений на контроллере.
  • Я пробовал создать @ControllerAdvice класс советника исключений, аннотированный с помощью @ControllerAdvice

В обоих случаях исключение не отображается, и вместо этого я получаю:

Страница ошибки Whitelabel

Это приложение не имеет явного отображения для / error, поэтому вы видите это как резерв.

 Sun Oct 25 16:00:43 PHT 2015 There was an unexpected error (type=Internal Server Error, status=500). Invalid OAuth access token. 

Вопрос:

Каков правильный способ использования Spring Boot для регистрации обработчика исключений, который может возвращать сериализованный объект ErrorResponse .

Мне удалось заставить его работать, зарегистрировав следующий обработчик исключений:

 @ControllerAdvice public class ExceptionHandler : ResponseEntityExceptionHandler() { @ExceptionHandler(Throwable::class) @ResponseBody internal fun onException(ex: Throwable): ErrorResponse { //TODO: Replace instanceof with polymorphism var responseCode = ResponseCode.VAMPServiceError if (ex is UnauthorizedException) { responseCode = ResponseCode.VAMPUnauthorized } val errorResponse = ErrorResponse( response = ResponseHeader(responseCode, ex.message)) return errorResponse } } 

Это было основано на другом пользователе StackOverflow (который я потерял). В этом ответе ответ предложил включить @EnableWebMVC в обработчик. Я обнаружил, что это не обязательно в моем случае "