我注意到OutputStream如果 curl 请求是 ctrl+c,下面的代码将使用相同的对象(调试时相同的哈希代码),然后重新运行。即使使用不同的参数,它也使用相同的OutputStream. 这显然会导致非常奇怪的输出。
原始输出流NullPointerException在写入时开始抛出,OutputStream因为底层HttpOutputStream不再存在(管道损坏)。这就是为什么我认为后续请求会重用同一个OutputStream对象很奇怪。
在 finally 块中关闭输出流可解决此问题。我在网上看到的一些例子没有明确关闭输出流。是OutputStream预期的重用吗?有没有人对我为什么会看到这种行为有任何想法?
@RequestMapping(value= URI_ROOT, method= RequestMethod.POST, produces = {"text/event-stream"})
public StreamingResponseBody methodName(
... params
) {
return new StreamingResponseBody() {
@Override
public void writeTo(OutputStream outputStream) {
try {
... code ...
} catch (Exception e) {
LOGGER.info("Migration thread interrupted.",e);
} finally {
IoUtil.closeSilently(outputStream); // This fixes it.
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |