2015-04-24 83 views
2

我有一個RestController Spring的引導應用程序和將下載並傳遞圖像的方法:Java的春季啓動Restcontroller RequestMapping執行兩次

@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

您的「下載代碼」是否有可能直接或間接再次擊中相同的URL? –

+0

我已經檢查過一次又一次,也有網絡分析工具,所以我可以說:不,它不。 – DaUser

回答

0

的問題在於它是用來測試RestController瀏覽器。 我'使用Firefox ...和Firefox往往會得到一些圖像周圍的HTML,但該方法不會返回HTML,所以Firefox正在啓動另一個請求...也用於尋找一個收藏夾圖標

Internet Explorer eg doesn'不關心它,並且該方法只按預期執行一次!

所以我的問題不是一個真正的問題,因爲後來我的圖像交付RestController將嵌入在一個網站,其中有HTML和一個圖標。