簡體   English   中英

如何通過@ControllerAdvice中的@ResponseStatus捕獲異常

[英]How to catch exceptions by @ResponseStatus in @ControllerAdvice

我正在尋找一種方法來處理與前端的通信,以防由@ResponseStatus驅動錯誤,以便

  • 如果響應是400/401/403,我可以記錄信息並發送特定的消息
  • 如果響應是500我可以記錄錯誤並發送另一個特定的消息

等等。

在我們的Api網關中,我們有一個RextExceptionController@ControllerAdvice ),我們處理異常並將我們自己的DTO返回到前端。

如果我針對單個異常(參見下面的示例),一切正常,但是如果我想僅僅針對響應HTTP狀態,這顯然不起作用。

@ExceptionHandler(MethodArgumentTypeMismatchException.class)
protected ResponseEntity<Object> handleMethodArgumentTypeMismatch(MethodArgumentTypeMismatchException ex) {
    ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST);
    apiError.setMessage("Bla bla Status 400");
    return buildResponseEntity(apiError);
}

@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
protected ResponseEntity<Object> handleHttpMediaTypeNotSupported(
  HttpMediaTypeNotSupportedException ex,
  HttpHeaders headers,
  HttpStatus status,
  WebRequest request) {
    ApiError apiError = new ApiError(HttpStatus.UNSUPPORTED_MEDIA_TYPE);
    apiError.setMessage("Bla bla Status 415");
    return buildResponseEntity(apiError);
}

這不是一種可持續的方式來處理它,因為來自不同團隊的未來開發(應用程序基於微服務架構)可能真的拋出任何類型的異常,我不想在所有可能的異常之后運行但是基於響應狀態的處理程序。

任何提示/想法?

干杯。

你可以使用一個http處理程序攔截器來攔截請求完成后的http響應,並根據你所擁有的狀態做一些動作,查看這篇文章https://www.baeldung.com/spring-mvc-handlerinterceptor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM