Java @ResponseBody导致EOFEException
我有一个SpringMVC控制器,它通过@ResponseBy注释返回一段HTML(作为字符串)。下面看一下方法签名:Java @ResponseBody导致EOFEException,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一个SpringMVC控制器,它通过@ResponseBy注释返回一段HTML(作为字符串)。下面看一下方法签名: @RequestMapping(value="/weather", method=RequestMethod.GET, produces="text/html") @ResponseBody public String getWeatherForcast(HttpServletResponse response) 从嵌入式Jetty实例运行应用程序时,我会得到预期的HTML响
@RequestMapping(value="/weather", method=RequestMethod.GET, produces="text/html")
@ResponseBody
public String getWeatherForcast(HttpServletResponse response)
从嵌入式Jetty实例运行应用程序时,我会得到预期的HTML响应,但是,应用程序服务器日志会为每个请求抛出以下堆栈跟踪:
org.eclipse.jetty.io.EofException
at org.eclipse.jetty.server.HttpOutput.flush(HttpOutput.java:137)
at ch.qos.logback.access.servlet.TeeServletOutputStream.flush(TeeServletOutputStream.java:85)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:297)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at org.springframework.util.StreamUtils.copy(StreamUtils.java:107)
at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:106)
at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:40)
at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:179)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:148) ...
查看Jetty代码后,它抛出此异常,因为请求上的套接字连接已关闭
也就是说,我注意到如果我直接使用响应对象(下面的代码片段),我会得到相同的结果,但没有EOFEException
@RequestMapping(value="/weather", method=RequestMethod.GET, produces="text/html")
public void getWeatherForcast(HttpServletResponse response) {
....
response.getWriter().write(xpathTemplate.evaluateAsString("/rss/channel/item/description",result));
response.flushBuffer();
}
我想知道为什么Spring@ResponseBody方法会导致过早关闭套接字,以及是否有任何方法可以克服这一问题。我发现了这一点。我使用Maven Cargo插件(版本1.3.3)运行我的嵌入式Jetty实例。使用嵌入式码头集装箱(V9.0.0-RC0)发布候选版本的货物版本1.3.3
我尝试将Cargo插件升级到使用Jetty 9.0.5的版本1.4.4,但EOFEException消失了。您使用的是哪个
Jetty
版本?