![](/img/trans.png)
[英]Spring Boot Amazon AWS S3 Bucket File Download - Access Denied
[英]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点上针对此错误执行自定义:
编写自定义异常处理程序以捕获您的异常并做一些优雅的事情。
@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_ENTITY
是HttpStatus
( org.springframework.http.HttpStatus
)
请根据您的需求更改方法handleAmazonS3Exception(...)
的代码。
如果要完全避免该异常,则可以在尝试下载该对象之前,使用Aws s3 api查看该对象是否存在。 我认为方法是doesObjectExist
。 但是,如果您仍然要下载文件(如果文件存在的话),这似乎有些矫kill过正。 因此,您可以尝试捕获,如果最终捕获了AmazonS3Exception,请检查状态码并做相应的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.