Webアプリケーションに簡単なグラフを表示したいので、JFreeChartをSpringMVCに統合することにしました。私は次の解決策を見つけました:
@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()を呼び出します。
この例外を回避するための賢い解決策はありますか?