[英]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.