我有一個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一個問題,但它是相同的行爲。按照預期工作,無需下載代碼,但下載圖像後,它會執行兩次兩次。
這是我的應用程序的一個嚴重的性能問題... :(
有什麼問題嗎?
您的「下載代碼」是否有可能直接或間接再次擊中相同的URL? –
我已經檢查過一次又一次,也有網絡分析工具,所以我可以說:不,它不。 – DaUser