Spring控制器和拦截器之间是什么

Spring what is between Controller and Interceptor

我有一个正在做某事的控制器,一切似乎都很好,它记录了成功,然后它就这样做了

return new ResponseEntity<>(resp, HttpStatus.OK);

似乎应该发送 200 OK。

好吧,我还有一个带有 "afterCompletion" 的 HandlerInterceptorAdapter,用于记录状态:

logger.debug("Response status: {}, URI: {}", response.getStatus(), request.getRequestURI());

这显示控制器成功的 500。

在标准输出日志中我看到一个错误

2018-01-12 12:33:59.035 ERROR 18952 --- [pr-8080-exec-14] o.s.boot.web.support.ErrorPageFilter     : Cannot forward to error page for request [/ws/path] as the response has already been committed.
As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false

org.apache.catalina.connector.ClientAbortException: java.io.IOException: APR error: -32

我找不到任何关于 APR 错误的文档,我也不知道为什么状态代码会出错。我正在使用 tomcat 8.5.

所以。 APR -32 是一个 "Client Abort" 错误。客户端等待超时。看起来正在发生的事情是客户提出了一个请求,并在队列中等待了几秒钟。它有一个很短的硬超时限制。客户端在服务器收到请求之前超时。然后服务器接收到请求并且一切正常,但是当试图写回客户端时,它发现套接字已关闭。所以它设置了 500 并抛出了那个异常。