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 "

  • No se puede publicar contenido web dynamic con Spring Boot y Kotlin
  • No puedo excluir MongoAutoConfiguration en Springboot-Kotlin (MongoSocketOpenException)
  • SpringMVC RequestMapping: Añadiendo .xml a la ruta del controller para la respuesta xml
  • Spring Data JPA / Hibernate "No se puede ubicar Attribute con el nombre de stack"
  • Tenga la security de que multiparte es nulo en el controller de descanso
  • Spring MVC Error 404 Bad Request Kotlin
  • Spring Boot e Hibernate. Manejar la fábrica de sesiones
  • No se puede conectar a Remote Mongo DB mediante Springboot
  • cómo cargar config en spring-webflux sin spring-boot?
  • Excepción de puntero nulo en Spring Proxy Class y Kotlin
  • Seguridad de spring. Página de inicio de session multilenguaje basada en url