[英]Spring controller method called twice
我正在制作一个 Spring MVC Web 应用程序。 问题是单个方法被调用了两次,我不知道为什么。
@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,模型为空)
我还观察到一个 GET 请求导致控制器方法执行两次。 使用 Chrome 浏览器请求服务时出现问题(使用 Postman 时未出现问题)。 就我而言,罪魁祸首是 JSONView Chrome 扩展。
我通过使用 Chrome 开发人员工具的网络选项卡确定了原因。 它显示我的 GET 服务被请求了两次。 第二个请求由 content.js 发起,这是一个与 JSONView 捆绑在一起的 JavaScript 文件。
在我禁用 JSONView 扩展后,通过 Chrome 的 GET 请求将导致控制器方法只执行一次。
我经历了这种称为两次的现象,因为BrowserSync在每个打开的 BrowserSync 浏览器窗口中重放 HTTP 请求。
我终于有时间在这里找到解决方案。 尝试了很多东西,但没有奏效。
我用@RequestParam 替换了@PathVariable,并且没有两次访问该URL :)
听起来像是客户端的问题。
打开浏览器,输入<host/port/whatever_you_need_to access_the_app>/demo/account/profile/f91b3a38-6921-41e0-98b7-58dff5cb1152
并查看日志。 您可能只会看到一个条目
现在运行您的客户端代码并检查对服务的网络请求。 如果您从 Chrome F12-> 网络选项卡之类的浏览器调用控制器应该会有所帮助。
我知道这是一种明显的,但我认为这个控制器并没有什么真正“不寻常”的,所以它应该更多地处于一般流程的水平。 在这种情况下,最好跟踪 HTTP 流量并查看它有多少/何时/如何向您的控制器生成请求。
有同样的问题。 最终我发现我在背景图像 url 中有一个null
,如下所示:
style="background-image: url(null);"
这导致发送另一个带有路径变量null
的 GET 。
我有同样的问题并找到了很多解决方案,最后我找到了简单的原因。 它在我的 html 模板 css: background:url() 中。 这种感冒将再次运行相同的网址。 所以我只需将其删除或将 url 放在括号中即可。
这也可能由于另一个原因而发生。 因为我发现了同样的事情并观察到了以下情况。
也许这为时已晚。 但是,我仍然面临这些问题并且每次都忘记解决方案。
如果您使用任何 JS 库,如 Angular 或 React,那么在您的服务调用中也要观察响应。
这是一个代码片段
return this.http.get<User>(`${this.resourceUrl}/activate`, { params: options, observe: 'response' })
.pipe(
filter((response: HttpResponse<User>) => response.ok),
map((response: HttpResponse<User>) => response.body),
catchError(error => {
return of(error)
})
);
要关注的关键领域是{ params: options, observe: 'response' }
我有一个正在监听localhost/
的控制器和一个匹配路径变量的 get 方法,如下所示:
@GetMapping("/{foo}")
String get(@PathVariable(required = false) String foo)
{
return "hello world";
}
问题是,在调用localhost/
之后,我接到了第一个电话,之后,我接到了第二个电话图标。
如果您要定义上下文根,情况也是如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.