Spring boot中使用@SessionAttributes需要注意的地方

在Spring Boot中,如果想把數據保存在session裏,當然可以使用原生Request直接保存session,有個更方便的方法,那就是使用註解@SessionAttributes。

使用這個註解,需要搞清楚它的運行原理,也就是什麼時候保存,什麼時候取出,否則當得出非期望的結果時會很疑惑。

尤其當和註解@ModelAttribute混用的時候,需要搞清楚優先級。

 

1.Session的保存。

   當某個Controller類裏使用了@SessionAttributes註解後,請求執行完handler後,會把保存在model裏指定的數據保存到session裏。

   由於執行時機的問題,當跟註解@ResponseBody混用的時候,會出錯。

   使用@ResponseBody註解,返回一個實體類時,ReturnValueHandler用的是RequestResponseBodyMethodProcessor,在內部直接會把結果寫入到response,然後關閉。

   然後再往session裏寫數據的話,就已經寫不進去了。

   解決的方法是不用註解@ResponseBody,直接返回一個MappingJackson2JsonView實例即可。

 

2.Session的讀取

   如果一個Controller類裏同時使用了@SessionAttributes,有個數據綁定的方法上用@ModelAttribute,並且在一個請求處理handler的參數裏,用了@ModelAttribute。

   先讀取session,如果session沒值,那麼就執行綁定數據的方法,然後綁定請求數據

   先讀取session,如果session有值,那麼就跳過綁定數據的方法,然後綁定請求數據

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章