Spring之跨重定向請求傳遞資料

2021-10-01 11:12:03 字數 1553 閱讀 3896

在開發場景中,大部分資料都是使用請求**(forward)進行傳遞,而使用重定向(redirect)傳遞資料可能比較少。

那麼問題來了:請求中的資料生命週期存活時間只在乙個請求**(request)中,當這個請求結束後,那麼請求中所帶的資料也會隨著這個請求一起拜拜了。而重定向會向伺服器發起兩個請求,所以第乙個請求的資料不就到不了第二個請求了嗎?如圖:

如果我們想傳遞的資料在第二個請求中有效,那麼怎麼辦呢?有以下兩種方法可以解決:

url路徑傳遞

使用flash屬性

url 路徑傳遞是比較簡單的一種選擇方式,因為重定向和請求**不同,所以在重定向時必須要前面加上redirect:(不加的話預設就為請求**):下面為重定向到colablog路徑下,傳遞引數:如下:

// 如 "redirect:/colablog/johnson"

return "redirect:/colablog/"

還有一種方式是使用模板方式來定義重定向的url,如:

public string redirect(model model) ";

}若user.getusername()為 johnson,那麼重定向的url將會變成redirect:/colablog/johnson

可以發現,使用url傳遞的都是一些比較簡單的資料,當我們需要傳遞物件時,可要怎麼辦呢?spring提供了資料傳送為flash功能,flash屬性會一直攜帶這些資料直到下一次請求,然後才會消失。提供實現的方法為redirectattributesaddflashattribute方法。如下:

public string test(redirectattributes attributes)

取出資料還是老樣子,像請求**(forward)那樣獲取資料。

public string colablog(model model)

redirectattributesmodel類的所有方法,因為redirectattributesmodel的擴充套件類。

public inte***ce redirectattributes extends model {}
至於為什麼使用flash屬性會攜帶到下一次請求中,然後才會消失呢?因為該flash屬性的資料會存放到會話當中,在重定向後,存在會話中的flash屬性會被取出,從會話資料轉移到模型資料之中。如下圖:

參考文獻:《spring實戰 第4版》

個人部落格**:

SpringMVC 跨重定向請求傳遞資料的方法實現

執行完post請求後,通常來講乙個最佳實踐就是執行重定向。重定向將丟棄原始請求資料,原始請求中的模型資料和請求都會消亡。可以有效避免使用者瀏覽器重新整理或者後退等操作,直接間接地重複執行已經完成的post請求。在控制方法中返回的檢視名稱中,在string前使用 redirect 字首,那麼這個str...

引數傳遞 重定向

設定v bind to 屬性,傳入引數id name 傳元件名 params 傳遞引數 需要物件 要用v bind 個人資訊 router link 在路由中繫結引數 index.js children 在profile.vue取出引數 template 所有元素 不能直接在根節點下 即 要用標籤包...

spring mvc 請求重定向

1 我在後台乙個controller跳轉到另乙個controller 方式一 使用modelandview return new modelandview redirect tolist 這樣可以重定向到tolist這個方法 方式二 返回string return redirect tolist 其...