我正在使用带有jetty的Spring的DeferredResult(版本:9.3.11.v20160721)并收到此错误。
java.lang.IllegalStateException: cannot reset buffer on committed response
at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1245)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:371)
at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:266)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
at java.lang.Thread.run(Unknown Source)
我做了谷歌,它告诉我在同一请求上发送了两次回复,但我在设置任何回复之前都进行了检查,因此不应该发生这种可能性。
private DeferredResult<Object> result = new DeferredResult<>(10000);
private void checkAndSend(Object res) {
if (result.isSetOrExpired()) {
log.warn("DeferredResult set/expired for res: {}", res);
return;
}
... // respsond
}
有人请帮帮我。
答案 0 :(得分:0)
您遇到错误,HttpServletResponse现在处于错误状态。
Jetty servlet引擎试图将错误报告给HTTP。 它做的第一件事是重置缓冲区,以便它可以设置状态和消息以发送错误响应。
但由于响应已经提交,因此无法重置缓冲区。 (其他东西已经开始在该连接上发送响应)