Spring 在ResourceAwareController.HandlerResourceRequest方法中为portlet响应使用不同的内容类型(image/png)?
我想通过portlet实现动态生成的图像(图表)。 为此,我扩展了一个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
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图像,它是编码字符串。