【发布时间】:2014-11-20 18:28:32
【问题描述】:
我正在对外部应用程序进行 API 调用(该应用程序将所有最初加载到其中的图像转换为 PNG)。 如果图像最初是作为 PNG 加载到该应用程序中的,那么 RestTemplate 可以得到它。如果它最初是作为其他内容加载的,然后转换为 PNG,则以下代码在 Spring 4.1.1 中尝试使用 RestTemplate 获取它时会引发错误。图像在外部应用程序上显示良好。
原因:javax.imageio.IIOException: I/O error reading PNG header! 在 com.sun.imageio.plugins.png.PNGImageReader.readHeader(PNGImageReader.java:315) ~[na:1.8.0_20] 在 com.sun.imageio.plugins.png.PNGImageReader.readMetadata(PNGImageReader.java:654) ~[na:1.8.0_20] 在 com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1248) ~[na:1.8.0_20] 在 com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1606) ~[na:1.8.0_20] 在 org.springframework.http.converter.BufferedImageHttpMessageConverter.read(BufferedImageHttpMessageConverter.java:174) ~[BufferedImageHttpMessageConverter.class:4.1.1.RELEASE] 在 org.springframework.http.converter.BufferedImageHttpMessageConverter.read(BufferedImageHttpMessageConverter.java:67) ~[BufferedImageHttpMessageConverter.class:4.1.1.RELEASE] 在 org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:104) ~[HttpMessageConverterExtractor.class:4.1.1.RELEASE] 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:576) ~[RestTemplate.class:4.1.1.RELEASE] ...省略了74个常用框架 原因:javax.imageio.IIOException:错误的 PNG 签名! 在 com.sun.imageio.plugins.png.PNGImageReader.readHeader(PNGImageReader.java:242) ~[na:1.8.0_20]
BufferedImage image = restTemplate.getForObject(getPhotoUrl(), BufferedImage.class, Collections.EMPTY_MAP);
【问题讨论】:
-
您可以将spring的日志级别设置为DEBUG,这样您就可以看到问题的更多细节。此外,如果您粘贴整个堆栈跟踪,对读者会更有帮助。尤其是堆栈跟踪的“原因:”部分对于理解潜在问题非常重要。
-
添加所有调用代码和对象类代码,这将有助于进一步调试您的问题
-
您并没有真正解释图像发生了什么,但错误提示:您得到的不是有效的 PNG 图像。直接从转换应用下载它,并控制它的真正格式。
标签: spring spring-mvc resttemplate