2013-10-21 59 views
3

我將使用StackOverflow的用戶配置文件頁面作爲示例。比方說,我們有這個網址:Spring MVC - 使用路徑變量編輯響應URL

https://stackoverflow.com/users/2036414/userlogin

如果我們改變(在瀏覽器的地址欄中編輯)最後的路徑變量是這樣的:

https://stackoverflow.com/users/2036414/aWordThatIsNotTheLoginOfThisUser

...並按下回車,返回的URL將是第一個,這意味着這個變量被設置爲正確的登錄,基於另一個變量,這可能是用戶的ID(2036414)。換句話說,該URL被修正爲:

https://stackoverflow.com/users/2036414/userlogin

我的問題是:如何做到這一點使用Spring MVC?這裏是我的控制器:

@RequestMapping(value="/{id}/{login}", method = RequestMethod.GET) 
public String showPerfilUsuario(@PathVariable("id") long id, @PathVariable("login") String login, Map<String, Object> model){ 
    Usuario usuario = usuarioService.buscarUsuarioPorId(id); 
    model.put("usuario", usuario); 
    return "usuario"; //that's the tiles definition's name 
} 

任何幫助將是apreciated,謝謝。

回答

6

Stackoverflow可能會做一些看中URL rewriting。一個簡單的方法是發送重定向。讓您的處理程序方法獲取用戶ID並檢查它是否與用戶名字符串匹配。 如果沒有,則發送重定向

return "redirect:/users/" + id + "/" + correctUserName; 

這將發送302響應到瀏覽器。瀏覽器將發送一個新的HTTP請求到構建的地址。

+1

不要忘記(在這種情況下),如果用戶名已經正確,你不應該重定向;否則你可能會進入重定向循環:) –

+0

它工作得很好!我認爲在這個解決方案中,但我忘記了驗證,這在這種情況下至關重要。謝謝! – vitorgreati

+0

@vitorgreati不客氣。請注意Michal的評論。 –