我想在我的web应用程序中显示一个简单的图形,所以我决定将JFreeChart集成到Spring MVC中。 我找到了以下解决方案:
@RequestMapping("/seeGraph")
public String drawChart(HttpServletResponse response) {
response.setContentType("image/png");
XYDataset pds = createDataset();
JFreeChart chart = createChart(pds);
try {
ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 600, 400);
response.getOutputStream().close();
} catch (Exception e) {
}
return "graph";
}
我猜这不好。虽然它确实显示了图形,但它也引发了异常:
getOutputStream() has already been called for this response] with root cause
java.lang.IllegalStateException: getOutputStream() has already been called for this response.
我做了一些研究,发现一个应用程序可以在任何给定的响应上调用getOutputStream或getWriter,但是不允许它们同时执行。
但由于ChartUtilities.writeChartAsPNG(),我必须调用getOutputstream,Spring将调用getWriter()。
是否有任何聪明的解决方案可以避免此异常?
答案 0 :(得分:1)
目前,您要求Spring在执行控制器方法后呈现一个名为graph
的视图(通过从方法返回视图名称)。但是,如果将数据写入控制器内的输出,则不应继续查看渲染阶段。
因此,您需要使用void
方法:
@RequestMapping("/seeGraph")
public void drawChart(HttpServletResponse response) { ... }