El controller de exception Spring Boot @ControllerAdvice no se activa

Tengo el siguiente consejo de control configurado para devolver un contrato de API para las condiciones de error:

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

Estaba funcionando bien y luego dejó de funcionar. Ahora todas las excepciones se enrutan a BasicErrorController , que devuelve el siguiente formatting:

 { "timestamp" : 1450495303166, "status" : 403, "error" : "Forbidden", "message" : "Access Denied", "path" : "/profile/candidates" } 

Lo anterior es un buen punto de partida dogmático, pero ahora no se saldrá del path.

  • He intentado replace los manejadores de errores con una instancia de ExceptionHandlerExceptionResolver pero eso no funcionó.
  • Intenté crear mi propio CustomErrorHandler, pero tampoco era adecuado, ya que la exception original ya no está en HttpServletRequest para cuando vuelva a HttpServletRequest al controller de errores personalizado. Esta información es necesaria para devolver una respuesta adecuada al cliente.

Cómo yo:

  • Haga que SpringBoot no envíe excepciones a un controller de exception.
  • Restaurar los manejadores de excepciones de @ControllerAdvice, de modo que solo pueda devolver un cuerpo de respuesta apropiado y un código de estado.

En los loggings de spring de inicio:

 main] .mmaExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in exceptionHandler main] .mmaExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in responseEntityExceptionHandler 

Editar:

Después de leer los documentos de Spring Boot, entiendo ahora que se espera que BasicErrorController solo active las excepciones que no maneja un @ControllerAdvice . Esto parece no estar sucediendo. Entonces la pregunta es ¿por qué?

También tengo un filter Spring Security que evalúa las cnetworkingenciales del encabezado API-Key y Access-Token. @ControllerAdvice no funciona aquí, es suficiente, dado que no estamos tratando con un punto final de controller.

Use EntryPoint y AcessDeniedHandler para manejar excepciones de filters de security. Se pueden configurar dentro de:

 .exceptionHandling() 

Y configure FailureHandler si extiende AbstractAuthenticationProcessingFilter en su filter.

  setAuthenticationFailureHandler() 

Afaik ErrorController se sobrescribirá si desplegará su aplicación en el server de aplicaciones.

  • Instant no se puede serializar al formatting apropiado incluso con jackson-datatype-jsr310
  • Referencia no resuelta: SpringExtension utilizando @ExtendWith anotación
  • Spring Boot Application: File System Watcher para muchas routes
  • Kotlin + Spring Boot solicita sorting
  • Usando una constante de Java en un parámetro de anotación de Kotlin
  • Kotlin: ejecuta una testing de integración, el error `diversión principal ya está definido`
  • No puedo excluir MongoAutoConfiguration en Springboot-Kotlin (MongoSocketOpenException)
  • Estado de respuesta HTTP SpringBoot Kotlin Api
  • Encabezados HTTP no devueltos en EC2
  • No se puede conectar a Remote Mongo DB mediante Springboot
  • Spring Boot e Hibernate. Manejar la fábrica de sesiones