小编典典

Java Spring Boot Restcontroller RequestMapping执行两次

spring-boot

我有一个带有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可能有问题,但这是相同的行为。无需下载代码即可按预期工作,但下载映像后,它将执行 两次

这是我应用程序的严重性能问题… :(

这里有什么问题?


阅读 403

收藏
2020-05-30

共1个答案

小编典典

问题取决于用于测试RestController的浏览器。我正在使用Firefox
…,Firefox倾向于在图像周围获取一些html。但是该方法不会返回html,因此Firefox正在启动另一个请求…也正在寻找favicon。

Internet Explorer例如不关心它,该方法仅按预期执行一次!

所以我的问题不是真正的问题,因为稍后我的RestController传递的图像将嵌入到具有html和favicon的网站中。

2020-05-30