Java Spring MVC-使用路径变量编辑响应URL

Java Spring MVC-使用路径变量编辑响应URL,java,rest,spring-mvc,path-variables,Java,Rest,Spring Mvc,Path Variables,我将以StackOverflow的用户配置文件页面为例。假设我们有一个URL: 如果更改(在浏览器的url栏中编辑)最后一个path变量,如下所示: …然后按Enter键,返回的URL将是第一个,这意味着该变量将根据另一个变量设置为正确的登录名,该变量可能是用户的id(2036414)。换句话说,URL被更正为: 我的问题是:如何使用SpringMVC做到这一点?这是我的控制器: @RequestMapping(value="/{id}/{login}", method = Request

我将以StackOverflow的用户配置文件页面为例。假设我们有一个URL:

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

…然后按Enter键,返回的URL将是第一个,这意味着该变量将根据另一个变量设置为正确的登录名,该变量可能是用户的id(2036414)。换句话说,URL被更正为:

我的问题是:如何使用SpringMVC做到这一点?这是我的控制器:

@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
}
@RequestMapping(value=“/{id}/{login}”,method=RequestMethod.GET)
公共字符串showPerfilusario(@PathVariable(“id”)长id,@PathVariable(“login”)字符串登录,映射模型){
Usuario-Usuario=usuarioService.buscarUsuarioPorId(id);
模型投入(“usuario”,usuario);
返回“usuario”;//这是tiles定义的名称
}

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

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

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

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

不要忘记(在这种情况下),如果用户名已经正确,则不应重定向;否则,您可能会进入重定向循环:)它工作得非常好!我在这个解决方案中进行了思考,但我忘记了验证,这在本例中是至关重要的。谢谢大家!@不客气。请注意Michal的评论。