簡體   English   中英

Spring Boot-自定義異常處理程序

[英]Spring boot - custom exceptions handler

我正在使用Spring Boot開發一個Rest應用程序。 此應用程序具有一個自定義過濾器,該過濾器僅允許在某些請求下進行訪問。 如果用戶需要特定資源,則過濾器將引發異常。 如何在全局級別處理此過濾器中生成的所有異常?

我已經嘗試了@ControllerAdvice批注,但是沒有用。

首先,您應該創建一個自定義異常並將其從runtimeException擴展

public class CustomException extends RuntimeException
{
    ...
}

然后你可以像這樣抓住它

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity handleCustomException(CustomException ex) {
          return ResponseHelper.response(ex.getData(), ex.getMsg(), 
         ex.getStatus());
        }
}

首先,您可能具有自定義的Exception Handler類,它將替換默認的

ResponseEntityExceptionHandler

以下是我在學習期間使用的一個示例代碼:

@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(Exception.class)
    public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));
        return new ResponseEntity<>(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(UserNotFoundException.class)
    public final ResponseEntity<Object> handleUserNotFoundException(Exception ex, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));
        return new ResponseEntity<>(exceptionResponse, HttpStatus.NOT_FOUND);
    }

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,               HttpHeaders headers, HttpStatus status, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "Validation Failed", ex.getBindingResult().toString());
        return new ResponseEntity<>(exceptionResponse, HttpStatus.BAD_REQUEST);
    }
}

然后,您可以添加自定義的異常,並在需要時補充響應對象。

請在此處找到其他類的完整代碼

暫無
暫無

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

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