Я использую единый интерфейс для нескольких обработчиков отчетов.ModelAndView всегда ожидается в результате.Я думаю, что это общая ситуация, когда вам нужно обрабатывать разные отчеты и возвращать данные в разных форматах.
Итак, я решил проблему, расширив AbstractView.Примечание. Пример кода загружает файл с диска.Вы должны создать поток вывода массива байтов, используя собственный генератор изображений и данные, представленные в модели.
Пример создания ModelAndView:
ModelAndView result = new ModelAndView();
result.setView(new ImageView());
result.addObject("chart_data_param1", "1");
result.addObject("chart_data_param2", "2");
result.addObject("chart_data_param3", "3");
Реализация класса View:
public class ImageView extends AbstractView {
public ImageView() {
setContentType("image/png");
}
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
ByteArrayOutputStream baos = createTemporaryOutputStream();
byte[] img = FileUtils.readFileToByteArray(new File("<some-file-path>"));
baos.write(img, 0, img.length);
baos.close();
writeToResponse(response, baos);
}
}