2014-07-18 37 views
1

這裏我控制器例如方法的實踐,最好在春季重定向控制器

(案例1)的一種方法是

@Controller 
@requestMapping("main") 
Class ControllerClass{ 


@RequestMapping("first", method = RequestMethod.POST) 
public String post(Model model){ 
    //processing 
    return "redirect:second"; 
} 

@RequestMapping("second", method = RequestMethod.GET) 
public String post(Model model){ 
    //processing 
    return "myview"; 
} 


} 

和(案例2)另一種方式是

@Controller 
@requestMapping("main") 
Class ControllerClass{ 


@RequestMapping("first", method = RequestMethod.POST) 
public String post(Model model){ 
    //processing 
    return "redirect:/main/second"; 
} 

@RequestMapping("second", method = RequestMethod.GET) 
public String post(Model model){ 
    //processing 
    return "myview"; 
} 


} 

兩種方式都能正常工作。 但我想知道哪一個是好還是最好的方式,以避免未來的問題就像一個 我最近

面臨當我從另一個控制器轉發請求/主/第一,我得到404錯誤代碼是使用案例1.

謝謝

+0

第一種情況真的有用嗎?沒有匹配'second'的映射,只有一個匹配的'main/second',我錯了嗎? – sp00m

+0

@ sp00m是的,它完美的工作 –

回答

2

按照Spring文檔:

重定向:前綴

雖然使用RedirectView可以正常工作,但如果控制器本身創建RedirectView,則不會避免控制器意識到重定向正在發生的事實。這實在是不理想,讓事情太緊密。控制器不應該真正在意如何處理響應。一般來說,它只能在注入視圖名稱的情況下運行。

特殊重定向:前綴允許您完成此操作。如果返回具有前綴重定向的視圖名稱,則UrlBasedViewResolver(和所有子類)將認識到這是需要重定向的特殊指示。視圖名稱的其餘部分將被視爲重定向網址。

最終的效果是一樣的,如果控制器返回RedirectView,但現在控制器本身可以在邏輯視圖名操作簡單。邏輯視圖名稱(如redirect:/ myapp/some/resource)將相對於當前Servlet上下文重定向,而名稱(如重定向:http://myhost.com/some/arbitrary/path)將重定向到絕對URL。

最實時的企業項目更喜歡在他們使用的所有控制器使用情況2,使不同的控制器之間的相互調用的罰款。