4

我将使用 StackOverflow 的用户配置文件页面作为示例。假设我们有这个 URL:

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

如果我们更改(在浏览器的 url 栏中编辑)最后一个路径变量,如下所示:

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

...然后按 Enter,返回的 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
}

任何帮助将不胜感激,谢谢。

4

1 回答 1

6

Stackoverflow 可能正在做一些花哨的URL 重写。一个简单的方法是发送重定向。让您的处理程序方法获取用户 ID 并检查它是否与用户名字符串匹配。如果没有,则发送重定向

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

这将向浏览器发送 302 响应。浏览器将向构造的地址发送一个新的 HTTP 请求。

于 2013-10-21T20:40:22.170 回答