Java Spring Boot Restcontroller RequestMapping执行了两次

时间:2015-04-24 09:17:52

标签: java spring 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可能存在问题,但这是相同的行为。按预期工作,无需下载代码,但下载图像后会执行两次

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

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

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

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

所以我的问题不是一个真正的问题,因为稍后我的RestController提供的图像将被嵌入到一个包含html和favicon的网站中。