Java Spring Boot Restcontroller RequestMapping执行了两次
我有一个带有RestController的Spring Boot应用程序和一个下载并传递图像的方法:
@RestController public class PictureController { @RequestMapping("/picture/{id}") public HttpEntity getImage(@PathVariable String id) { logger.info("Requested picture : >> " + id + " <<"); // !! Execute code for downloading !! // Create Headers... // return HttpEntity } }
在日志文件中,我可以读到该方法执行两次 ,我不知道为什么。
如果我删除下载代码,它会按预期执行一次 。
是因为下载需要一秒钟吗?
下载代码是……
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的网站中。