GET请求-重定向到另一个页面并保留params



我正在用Spring MVC构建一个应用程序,我想重定向到另一个url,但我想保留参数。

这就是我的控制器中的内容:

@RequestMapping(value = "/users/", method = RequestMethod.GET)
public String redirect(
@RequestParam(value = "name") String name,
@RequestParam(value = "surname") String name,
RedirectAttributes redirectAttributes
) {
redirectAttributes.addFlashAttribute("surname", surname);
return String.format("redirect:/users/name/%s", name);
}
@RequestMapping(value = "/users/name/{name}", method = RequestMethod.GET)
public String view(
@PathVariable("name") String name,
Model model,
@RequestParam(value = "surname") String surname
) {
...
}

例如,当我点击/users/?name=mark&surname=williams时,我希望重定向到users/name/mark?surname=williams

然而,我被重定向了,但参数消失了。如果我在Intellij中设置了一个拦截器,我可以看到它接收到参数,但它们没有显示。

您可以使用HttpServletResponse.sendRedirect((实现相同的目的:

@RequestMapping(value = "/users/", method = RequestMethod.GET)
public String redirect(
@RequestParam(value = "name") String name,
@RequestParam(value = "surname") String surname,
HttpServletResponse httpResponse
) throws IOException {
httpResponse.sendRedirect("/CONTEXT-ROOT/users/name/"+ name+"?surname="+surname);
}
@RequestMapping(value = "/users/name/{name}", method = RequestMethod.GET)
@ResponseBody
public String view(
@PathVariable("name") String name,
@RequestParam(value = "surname") String surname
) {
System.out.println("surname="+surname);
return "{"response":"ok"}";
}

要使redirect:工作,您可能需要添加一个UrlBasedViewResolver。

检查这个问题:从一个控制器方法重定向到另一个控制器的方法

最新更新