[英]Spring Boot @RestControllerAdvice not Catching Custom Exceptions
[英]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.