0

我正在开发一个弹簧启动应用程序。我想保存 Unexpected(500 Internal server errors) 以便轻松获取错误元数据。所以 :

1-我为意外情况添加了一个异常处理程序。

  @ExceptionHandler(Exception.class)
  @ResponseStatus(value = INTERNAL_SERVER_ERROR)
  public @ResponseBody ErrorResponse internalServerError(Exception ex, HttpServletRequest req) {
    ErrorMeta errorMeta = ErrorMeta.createErrorMeta(ex, req);
    String message = localeHelper.extractErrorMessage(req, UNKNOWN.getLabel());
    UnexpectedError unexpectedError = errorMapper.toEntity(UNKNOWN, errorMeta);
    unexpectedError = errorRepository.save(unexpectedError);
    UUID traceId = unexpectedError.getId();
    return ErrorResponse.newUnknownError(traceId, message);
  }

2- 我添加了过滤器以便能够多次阅读内容。

protected void doFilterInternal(
      HttpServletRequest request, HttpServletResponse response, FilterChain chain)
      throws ServletException, IOException {
    ContentCachingRequestWrapper cached = new ContentCachingRequestWrapper(request);
    ....
    ....
    chain.doFilter(cached, response);
    
  }

3-最后我试图从中获取请求正文HttpServletRequest并获取空正文。

req.getReader().lines().collect(Collectors.joining(System.lineSeparator()));

我检查了我在上面第 2 项中共享的doFilterInternal方法。在调试模式下,我在第 3 项运行相同的代码,我得到了请求正文。但我不能从控制器的建议中得到。我该如何解决这个问题?

4

0 回答 0