我在春季启动应用程序中实际上遇到了一个问题,我开发了一个链接到s3存储桶的静态api,我已经自定义了一些异常,但是当我运行url以获取控制台中不存在的对象时,我看到了此错误异常在我的控制台中:


  2019-07-25 09:06:45.733错误1 --- [-nio-443-exec-1]
  o.a.c.c.C。[。[。[/]。[dispatcherServlet]:的Servlet.service()
  路径[]中的servlet [dispatcherServlet]抛出异常
  [请求处理失败;嵌套异常为
  com.amazonaws.services.s3.model.AmazonS3Exception:指定的密钥
  不存在。 (服务:Amazon S3;状态代码:404;错误代码:
  NoSuchKey;要求编号:60E24BCF6860FC66; S3扩展请求ID:
  DUEnMWN7YZKug74Q15uHt4Zei3 + a7SxTNYzoj99O0YW58WOwvkdM1kwYpcHrGJiTrLkRLOdUL5I =),
  S3扩展请求ID:
  DUEnMWN7YPOAIZADg74Q15uHt4Zei3 + a7SxTNYzoj99O0YW58WOwvkdM1kwYpcHrGJiTrLkRLOdUL5I =]
  根本原因
  
  com.amazonaws.services.s3.model.AmazonS3Exception:指定的密钥
  不存在。 (服务:Amazon S3;状态代码:404;错误代码:
  NoSuchKey;要求编号:60E24BCF6860FC66; S3扩展请求ID:
  DUEnMWN7YZKug74Q15uHt4ZDFSFSQSDei3 + a7SxTNYzoj99O0YW58WOwvkdM1kwYpcHrGJiTrLkRLOdUL5I =)


所以我的问题是如何在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(...)的代码。

10-02 03:40