簡體   English   中英

Java:自定義全局異常處理程序始終返回200狀態

[英]Java: Custom Global exception handler always returns 200 status

我為我的程序創建了一個全局異常處理程序,該程序正在運行並捕獲異常,但是當我嘗試從HttpServletResponse獲取狀態代碼時,我總是得到200狀態。 有什么辦法可以使我從異常類中獲得正確的狀態? 或者,如果您還有其他工作需要,我將不勝感激。 找不到任何在線內容,我也不想為處理程序中遇到的每個異常都對httpStatus進行硬編碼。 我想用這種方法捕獲所有異常。 這是我在GlobalExceptionHandler類中創建的方法(同樣,我在類中使用@ControllerAdvice批注):

@ExceptionHandler(value = Exception.class)
public @ResponseBody
ResponseEntity<Object> error(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception {

    log.error("Error in call to " + request.getRequestURI() + " Response: " + response.toString(), e);

    ExceptionResource exception = new ExceptionResource();
    exception.setLocation(request.getRequestURI());
    exception.setStatus(response.getStatus());
    exception.setStackTrace(e.getStackTrace());

    return new ResponseEntity<>(exception, HttpStatus.valueOf(response.getStatus()));
}

如果您使用的是Spring MVC,則您的異常需要具有以下內容:

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order")
public class OrderNotFoundException extends RuntimeException {
    // ...
}

資源

解答:我不得不考慮另一種實現,但是我確實找到了一種獲取使用@ResponseStatus批注創建的自定義異常狀態的方法。 您將要使用它來獲取狀態:

 HttpStatus status = AnnotationUtils.findAnnotation(exception.getClass(), ResponseStatus.class).value();

其中exception是傳遞給處理程序的異常。

暫無
暫無

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

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