我有一个带有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可能存在问题,但这是相同的行为。按预期工作,无需下载代码,但下载图像后会执行两次。
这是我的应用程序严重的性能问题...... :(
这里有什么问题?
答案 0 :(得分:0)
问题取决于用于测试RestController的浏览器。 我正在使用Firefox ...而Firefox往往会在图像周围获得一些HTML。但该方法不返回html,因此Firefox正在启动另一个请求...也是为了寻找一个favicon。
Internet Explorer,例如不关心它,方法只按预期执行一次!
所以我的问题不是一个真正的问题,因为稍后我的RestController提供的图像将被嵌入到一个包含html和favicon的网站中。