【问题标题】:Spring MVC - Edit the response URL with path variablesSpring MVC - 使用路径变量编辑响应 URL
【发布时间】:2013-10-21 20:26:27
【问题描述】:

我将使用 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
}

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

【问题讨论】:

    标签: java rest spring-mvc path-variables


    【解决方案1】:

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

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

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

    【讨论】:

    • 不要忘记(在这种情况下)如果用户名已经正确,则不应重定向;否则你可能会进入重定向循环:)
    • 效果很好!我想在这个解决方案中,但我忘记了验证,这在这种情况下至关重要。谢谢!
    • @vitorgreati 欢迎您。也请注意 Michal 的评论。
    猜你喜欢
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2015-01-24
    • 2015-01-25
    • 1970-01-01
    • 2011-12-12
    • 2014-01-24
    • 2012-03-09
    相关资源
    最近更新 更多