簡體   English   中英

如何在我的春季啟動代碼中處理Amazon S3存儲桶的404錯誤

[英]How to handle 404 error for amazon s3 bucket in my spring boot code

我在春季啟動應用程序中實際上遇到了一個問題,我開發了一個鏈接到s3存儲桶的靜態api,我已經自定義了一些異常,但是當我運行url以獲取控制台中不存在的對象時,我看到了此錯誤異常在我的控制台中:

2019-07-25 09:06:45.733錯誤1 --- [-nio-443-exec-1] oaccC [。[。[/]。[dispatcherServlet]:上下文中Servlet [dispatcherServlet]的Servlet.service()路徑[]引發異常[請求處理失敗; 嵌套異常是com.amazonaws.services.s3.model.AmazonS3Exception:指定的鍵不存在。 (服務:亞馬遜S3;狀態碼:404;錯誤代碼:NoSuchKey;請求ID:60E24BCF6860FC66; S3擴展請求ID:DUEnMWN7YZKug74Q15uHt4Zei3 + a7SxTNYzoj99O0YW58WOwvkdM1kwYpcHrGJiTrLkRLOdUL5I =),S3擴展請求ID:DUEnMWN7YPOAIZADg74Q15uHt4Zei3 + a7SxTNYzoj99O0YW58WOwvkdM1kwYpcHrGJiTrLkRLOdUL5I =]與根源

com.amazonaws.services.s3.model.AmazonS3Exception:指定的鍵不存在。 (服務:Amazon S3;狀態代碼:404;錯誤代碼:NoSuchKey;請求ID:60E24BCF6860FC66; S3擴展請求ID:DUEnMWN7YZKug74Q15uHt4ZDFSFSQSDei3 + a7SxTNYzoj99O0YW58WOwvkdM1kwYpcHrGjLOD)

所以我的問題是如何在2點上針對此錯誤執行自定義:

  1. 控制台中未顯示此錯誤(從技術上講,我不是指更改日志參數)
  2. 使用某些方法處理此異常

編寫自定義異常處理程序以捕獲您的異常並做一些優雅的事情。

@ControllerAdvice
@RestController
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(AmazonS3Exception.class)
    public final ResponseEntity<Object> handleAmazonS3Exception(AmazonS3Exception ex, WebRequest request) {
        ApiError apiError = new ApiError(UNPROCESSABLE_ENTITY, ex.getLocalizedMessage(), ex.getErrors());
        return new ResponseEntity<>(apiError, UNPROCESSABLE_ENTITY);
    }
}

在這里, UNPROCESSABLE_ENTITYHttpStatusorg.springframework.http.HttpStatus

請根據您的需求更改方法handleAmazonS3Exception(...)的代碼。

如果要完全避免該異常,則可以在嘗試下載該對象之前,使用Aws s3 api查看該對象是否存在。 我認為方法是doesObjectExist 但是,如果您仍然要下載文件(如果文件存在的話),這似乎有些矯kill過正。 因此,您可以嘗試捕獲,如果最終捕獲了AmazonS3Exception,請檢查狀態碼並做相應的事情。

暫無
暫無

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

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