顯示具有 url template 標籤的文章。 顯示所有文章
顯示具有 url template 標籤的文章。 顯示所有文章

2017年12月26日 星期二

Java Spring - Carrying data across redirect requests

  • redirect
    • 處理完POST後,通常都會執redirect。這樣能夠防止點擊refresh或back時,client重新執行危險的POST
    • 通常使用redirect: prefix能夠重新定位
    • return "redirect:/spitter/" + spitter.getUsername();
      
    • 問: 如何發送data給redirect的目標method?
    • 答: 當一個controller method完成之後,這個method所指定的model data將會複製到request中,並作為request的property,request會forward到view上。因為controller method和view處理的是同一個request,所以在forward過程中,request property也能夠保存。但當controller是redirect時,原始的request就消失了,並且會發起一個新的GET request。原始request中所帶有的model data也跟著request消失了,在新的request上,沒有任何的model data,這個request必須要自己計算data
    • 有一些方法能夠使用redirect但又能夠將data傳遞給redirect的method中
      • 使用URL template 以path variable或或query parameter的形式
      • 透過flash attribute發送data