Exception Handler no funciona con `spring-boot-starter-data-rest`

Mi última experiencia en Java / Spring fue hace cuatro años. Empecé a aprender Spring Boot con Kotlin.

He creado un service web RESTful (en Kotlin) de esta manera, y funciona bien:

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

Ahora estoy teniendo problemas para agregar un manejador de excepciones cuando facebookAuth arroja una exception no autorizada.

Lo que he intentado:

  • Traté de registrar un método de controller de exception en el controller.
  • Intenté crear una class de asesor de exception transversal anotada con @ControllerAdvice

En ambos casos, la exception no está asignada, y en su lugar obtengo:

Página de error de Whitelabel

Esta aplicación no tiene una asignación explícita para / error, por lo que está viendo esto como una alternativa.

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

Pregunta:

¿Cuál es la forma correcta con Spring Boot para registrar un controller de exception que puede devolver un object serializado ErrorResponse .

Pude hacerlo funcionar registrando el siguiente controller de excepciones:

 @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 } } 

Esto se basó en otro elemento de StackOverflow (que he perdido). En esa respuesta, la respuesta sugerida para include @EnableWebMVC en el controller. Descubrí que esto no era necesario en mi caso "

  • Spring MVC Error 404 Bad Request Kotlin
  • No puedo excluir MongoAutoConfiguration en Springboot-Kotlin (MongoSocketOpenException)
  • No se puede publicar contenido web dynamic con Spring Boot y Kotlin
  • cómo cargar config en spring-webflux sin spring-boot?
  • Spring Boot ThymeLeaf y Kotlin: ¿el valor de la casilla no se pasa al controller?
  • Excepción de puntero nulo en Spring Proxy Class y Kotlin
  • Seguridad de spring. Página de inicio de session multilenguaje basada en url
  • Spring Data JPA / Hibernate "No se puede ubicar Attribute con el nombre de stack"
  • Clase de datos de Kotlin a JSON con Spring / Jackson
  • Spring Boot .mustache Extensión de file
  • ¿No se necesita NotNull en Kotlin?