我有一个带有RestController的Spring Boot应用程序和一个将下载并传递图像的方法:
@RestController public class PictureController { @RequestMapping("/picture/{id}") public HttpEntity<byte[]> getImage(@PathVariable String id) { logger.info("Requested picture : >> " + id + " <<"); // !! Execute code for downloading !! // Create Headers... // return HttpEntity<byte[]> } }
在日志文件中,我可以看到该方法执行了 两次 ,但我不知道为什么。
如果我删除了下载代码,它将按预期执行 一次 。
是因为下载需要一秒钟吗?
下载代码是…
byte[] response; try { URL url = new URL(....); InputStream in = new BufferedInputStream(url.openStream()); ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int n = 0; while (-1 != (n = in.read(buf))) { out.write(buf, 0, n); } out.close(); in.close(); response = out.toByteArray();
我还尝试了几种解决方案,例如…
@RequestMapping(value = "/picture2/{id}", headers = "Accept=image/jpeg, image/jpg, image/png, image/gif") public @ResponseBody byte[] getArticleImage2(@PathVariable String id) {
我以为HttpEntity可能有问题,但这是相同的行为。无需下载代码即可按预期工作,但下载映像后,它将执行 两次 。
这是我应用程序的严重性能问题… :(
这里有什么问题?
问题取决于用于测试RestController的浏览器。我正在使用Firefox …,Firefox倾向于在图像周围获取一些html。但是该方法不会返回html,因此Firefox正在启动另一个请求…也正在寻找favicon。
Internet Explorer例如不关心它,该方法仅按预期执行一次!
所以我的问题不是真正的问题,因为稍后我的RestController传递的图像将嵌入到具有html和favicon的网站中。