Java Spring Boot Restcontroller RequestMapping 执行了两次
Java Spring Boot Restcontroller RequestMapping executed twice
我有一个 Spring 带有 RestController 的引导应用程序和一个将下载并传递图像的方法:
@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 可能有问题,但这是相同的行为。在没有下载代码的情况下按预期工作,但在下载图像时它会执行 两次。
这是我的应用程序的一个严重性能问题...:(
这里有什么问题?
问题取决于用于测试RestController 的浏览器。
我正在使用 Firefox...而 Firefox 倾向于在图像周围获得一些 html。但是该方法没有 return html 因此 Firefox 正在启动另一个请求...也是为了寻找一个图标。
Internet Explorer 例如不关心它并且该方法仅按预期执行一次!
所以我的问题不是真正的问题,因为稍后由 RestController 传送的我的图像将嵌入到具有 html 和网站图标的网站中。
我有一个 Spring 带有 RestController 的引导应用程序和一个将下载并传递图像的方法:
@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 可能有问题,但这是相同的行为。在没有下载代码的情况下按预期工作,但在下载图像时它会执行 两次。
这是我的应用程序的一个严重性能问题...:(
这里有什么问题?
问题取决于用于测试RestController 的浏览器。 我正在使用 Firefox...而 Firefox 倾向于在图像周围获得一些 html。但是该方法没有 return html 因此 Firefox 正在启动另一个请求...也是为了寻找一个图标。
Internet Explorer 例如不关心它并且该方法仅按预期执行一次!
所以我的问题不是真正的问题,因为稍后由 RestController 传送的我的图像将嵌入到具有 html 和网站图标的网站中。