簡體   English   中英

使用多個異常優化Spring RestControllerAdvice

[英]Optimize Spring RestControllerAdvice with multiple exceptions

我有大約20到30種不同類型的不同Exception,它們都在Java中擴展了Exception類。 一個例子是:

public class NoHandlerFoundException extends Exception {

private static final long serialVersionUID = -9079454849611061074L;

public NoHandlerFoundException() {
    super();
}

public NoHandlerFoundException(final String message) {
    super(message);
}

}

其他示例是:

public class ResourceNotFoundException extends Exception{

private static final long serialVersionUID = -9079454849611061074L;

public ResourceNotFoundException() {
    super();
}

public ResourceNotFoundException(final String message) {
    super(message);
}

}

還有很多。 如您所見,大多數代碼都是重復的,然后使用ControllerAdvice之類的(我知道ControllerAdvice參數異常類中的代碼應該是正確的):

@ExceptionHandler({NoHandlerFoundException.class, ResourceNotFoundException.class})
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public @ResponseBody ExceptionResponse handleResourceNotFound(final NoHandlerFoundException exception,
        final HttpServletRequest request) {

    ExceptionResponse error = new ExceptionResponse();
    error.setErrorMessage(exception.getMessage());
    error.callerURL(request.getRequestURI());

    return error;
}

所以我想知道我們是否有什么方法可以優化上述異常,而不是編寫單獨的類執行n次幾乎相同的工作,但仍希望區分它們。 謝謝。

您可以使用以下方法來減少代碼冗余。

    @ExceptionHandler(value = {NoHandlerFoundException.class, ResourceNotFoundException.class})
protected ResponseEntity handleInvalidDataException(RuntimeException exception, WebRequest request) {

    ExceptionResponse error = new ExceptionResponse();
    error.setErrorMessage(exception.getMessage());
    error.callerURL(request.getRequestURI());

    return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
}

暫無
暫無

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

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