我正在开发一个弹簧启动应用程序。我想保存 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 项运行相同的代码,我得到了请求正文。但我不能从控制器的建议中得到。我该如何解决这个问题?