Spring控制器方法调用两次

问题描述 投票:4回答:5

我正在制作一个Spring MVC网络应用程序。问题是单个方法被调用两次,我不知道为什么。

@RequestMapping(value="/profile/{id}", method = RequestMethod.GET)
public String displayUserProfile( @PathVariable String id) {

    System.out.println("asdasddsasd");

    return "account/userProfile";

}

我评论了这个方法的许多行,但仍然无法正常工作。还试图返回其他视图..没有好运。

在控制台中(写入ulr请求):

/demo/account/profile/f91b3a38-6921-41e0-98b7-58dff5cb1152
asdasddsasd
/demo/account/profile/0
asdasddsasd

在第二次调用tihs方法之后,我会看到它

任何其他方法都可以。有谁知道这里的问题是什么?

*我也从这里读到类似的问题......没有任何帮助

LE:我在评论中也说了些什么。有趣的是,如果我将模型设置为视图,则在方法的第二次调用中,我的视图从第一次调用获得模型。 (在第二次调用时,id为0,模型为null)

java spring spring-mvc
5个回答
5
投票

我还观察到一个GET请求导致控制器方法执行两次。使用Chrome浏览器请求服务时出现问题(使用Postman时未出现此问题)。在我的情况下,罪魁祸首是JSONView Chrome扩展。

我使用Chrome开发者工具的“网络”标签确定了原因。它显示我的GET服务被请求了两次。第二个请求是由content.js发起的,这是一个与JSONView捆绑在一起的JavaScript文件。

禁用JSONView扩展后,通过Chrome的GET请求将导致控制器方法只执行一次。


1
投票

我终于有时间在这里找到解决方案。试了很多东西,但没办法。

我用@RequestParam替换了@PathVariable,并且访问的URL没有两次:)


1
投票

我遇到了这种被称为两次的现象,因为BrowserSync在每个打开的BrowserSync浏览器窗口中重放了HTTP请求。


0
投票

听起来像客户端的问题。

  • 打开浏览器,输入/ demo / account / profile / f91b3a38-6921-41e0-98b7-58dff5cb1152并查看日志您可能只看到一个条目
  • 现在运行您的客户端代码并检查对服务的网络请求。如果您从浏览器调用控制器,如chrome F12-> Network选项卡应该有帮助。

我知道这是一种显而易见的,但我认为在这个控制器中没有什么真正“不寻常”,所以它应该更多地处于一般流程的水平。在这种情况下,最好跟踪HTTP流量并查看它向控制器生成请求的次数/时间/方式

希望这可以帮助


0
投票

有同样的问题。最终我发现我在背景图像网址中有一个null,如下所示:

style="background-image: url(null);"

导致使用路径变量null发送另一个GET。

© www.soinside.com 2019 - 2024. All rights reserved.