繁体   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