实际上,我在我的spring引导应用程序中遇到了一个问题,我开发了一个与s3桶链接的restful,我定制了一些异常,但是当我运行url以获得控制台中不存在的对象时,我在我的控制台中看到了这个错误异常:
2019-07-25 09:06:45.733错误1 -nio-443-exec-1 o.a.c.c.C.[.[./.dispatcherServlet : Servlet.service() for servlet dispatcherServlet in path []引发的异常请求处理失败;嵌套异常为Servlet.service-1 o.a.c.c.)--指定的键不存在。(服务: DUEnMWN7YZKug74Q15uHt4Zei3+a7SxTNYzoj99O0YW58WOwvkdM1kwYpcHrGJiTrLkRLOdUL5I=),S3;状态代码: 404;错误代码: NoSuchKey;请求ID: 60E24BCF6860FC66;S3扩展请求ID: S3 S3 Extended : DUEnMWN7YPOAIZADg74Q15uHt4Zei3+a7SxTNYzoj99O0YW58WOwvkdM1kwYpcHrGJiTrLkRLOdUL5I=及其根源 com.amazonaws.services.s3.model.AmazonS3Exception:指定的键不存在。(服务: S3;状态代码: 404;错误代码: NoSuchKey;请求ID: 60E24BCF6860FC 66;S3扩展请求ID: NoSuchKey)
因此,我的问题是如何对此错误执行定制,具体如下:
发布于 2019-07-25 10:16:04
编写自定义异常处理程序来捕获异常并执行优雅的操作。
@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(...)的代码。
发布于 2019-07-25 11:36:44
如果希望完全避免异常,可以在尝试下载该对象之前使用Aws s3 api查看该对象是否存在。我认为方法是doesObjectExist。但是,如果您要下载该文件,以防止其存在,这似乎是过火了。因此,您可以尝试捕获,如果最终捕获到AmazonS3Exception,则检查状态代码并相应地执行操作。
https://stackoverflow.com/questions/57199445
复制相似问题