![](/img/trans.png)
[英]Spring Boot @ControllerAdvice Exception Handler not returning HTTP Status Text
[英]Spring Boot @ControllerAdvice exception handler not firing
我設置了以下控制器建議,以返回錯誤條件的API合同:
@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
實例替換錯誤處理程序,但是沒有用。 HttpServletRequest
。 需要此信息才能向客戶端返回適當的響應。 我怎么樣:
在啟動彈簧日志:
main] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in exceptionHandler
main] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in responseEntityExceptionHandler
編輯:
通過Spring引導文檔閱讀后,我現在下站在了BasicErrorController情況應該只是一個火沒有被處理的任何異常@ControllerAdvice
。 這似乎沒有發生。 所以問題是為什么?
我還有一個Spring Security過濾器,用於評估API-Key和Access-Token標頭憑據。 @ControllerAdvice在這里不起作用 - 公平,因為我們沒有處理控制器端點!
使用EntryPoint和AcessDeniedHandler處理安全過濾器的異常。 里面可以配置:
.exceptionHandling()
如果在過濾器中擴展AbstractAuthenticationProcessingFilter,請配置FailureHandler。
setAuthenticationFailureHandler()
如果要在應用程序服務器下部署應用程序,Afaik ErrorController將被覆蓋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.