Spring 在ResourceAwareController.HandlerResourceRequest方法中为portlet响应使用不同的内容类型(image/png)?

Spring 在ResourceAwareController.HandlerResourceRequest方法中为portlet响应使用不同的内容类型(image/png)?,spring,image,spring-mvc,portlet,spring-portlet-mvc,Spring,Image,Spring Mvc,Portlet,Spring Portlet Mvc,我想通过portlet实现动态生成的图像(图表)。 为此,我扩展了一个org.springframework.web.portlet.mvc.ResourceAwareController类,并在一个公共模型和视图handleResourceRequest(final ResourceRequest request,final ResourceResponse response)方法中实现了资源请求处理 代码如下所示: public ModelAndView handleResourceR

我想通过portlet实现动态生成的图像(图表)。 为此,我扩展了一个
org.springframework.web.portlet.mvc.ResourceAwareController
类,并在一个
公共模型和视图handleResourceRequest(final ResourceRequest request,final ResourceResponse response)
方法中实现了资源请求处理

代码如下所示:

   public ModelAndView handleResourceRequest (final ResourceRequest request, final ResourceResponse response) throws Exception{

        if some condition {
        try {
            response.reset ();
        } catch (Exception e) {
            e.printStackTrace ();
        }
        .
        .
        .

        final JFreeChart chart = createStatisticsChart (xyDataSet, period, stats.size ());
        final BufferedImage bi = chart.createBufferedImage (700, 430);

        if (null != bi) {
            response.setContentType ("image/png");
            OutputStream out;
            out = response.getPortletOutputStream ();

            final Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName ("png");
            if (iter.hasNext ()) {
                final ImageWriter writer = iter.next ();
                final ImageWriteParam iwp = writer.getDefaultWriteParam ();
                final MemoryCacheImageOutputStream mos = new MemoryCacheImageOutputStream (out);
                writer.setOutput (mos);
                final IIOImage image = new IIOImage (bi, null, null);
                writer.write (null, image, iwp);
            }
        } 
        .
        .
        .

        return null;
        }
        else some conditions {
            .
            .
            return new ModelAndView (returnPath)
        }
    }
publicmodelandview handleResourceRequest(最终资源请求,最终资源响应)引发异常{
如果有条件{
试一试{
response.reset();
}捕获(例外e){
e、 printStackTrace();
}
.
.
.
final JFreeChart chart=createStatisticsChart(xyDataSet,period,stats.size());
最终BuffereImage bi=chart.createBuffereImage(700430);
如果(null!=bi){
response.setContentType(“image/png”);
输出流输出;
out=response.getPortletOutputStream();
最终迭代器iter=ImageIO.getImageWritersByFormatName(“png”);
if(iter.hasNext()){
最终ImageWriter=iter.next();
final ImageWriteParam iwp=writer.getDefaultWriteParam();
最终MemoryCacheMageOutputStream mos=新的MemoryCacheMageOutputStream(输出);
writer.setOutput(mos);
最终IIOImage图像=新IIOImage(bi,null,null);
writer.write(null,image,iwp);
}
} 
.
.
.
返回null;
}
还有一些条件吗{
.
.
返回新模型和视图(返回路径)
}
}
使用portlet资源url来访问它。 但是我总是得到这个图像的“text/html”输出,尽管在上面的方法中,我将portlet响应的内容类型设置为“image/png”。因此我得到一个奇怪的字符作为输出,而不是正确的图表图像


�巴布亚新几内亚IHDR� � rL�N.}IDATx���哦\wz��@)��R�>X��RJ��J��� 公元�J� 2v�Z���"��ٟ�分贝���F��Ԥ��N��%, � s�fMvY7B�,!B� �L�+C�VX+�6R����܌8 �F3Ҍ� ����s�Fg>��s��y&M�3v��� P� ^��������`������˿��� � ӯ�ʯ����T���499y�� Z�5.�#���������您将获得一个PNG返回-您可以看到PNG签名(“PNG IHDR”字符串)在输出的开头。我对一个有时返回PNG,有时返回HTML的方法提出疑问。这似乎有点过载。猜测您的HTML需要HTML,并试图将PNG显示为HTML。@stdunbar请查看更新的问题。输出不完全是PNG图像,它是编码字符串。