我正在尝试重定向,而不会将参数添加到我的网址。
@Controller
...
public class SomeController
{
...
@RequestMapping("save/")
public String doSave(...)
{
...
return "redirect:/success/";
}
@RequestMapping("success/")
public String doSuccess(...)
{
...
return "success";
}
重定向后,我的网址看起来总是这样:.../success/?param1=xxx¶m2=xxx
。
由于我希望我的URL有点RESTful,并且在重定向后我从不需要params,我不希望它们被添加到重定向上。
任何想法如何摆脱它们?
答案 0 :(得分:32)
在Spring 3.1中,控制此行为的首选方法是在方法中添加RedirectAttributes
参数:
@RequestMapping("save/")
public String doSave(..., RedirectAttributes ra)
{
...
return "redirect:/success/";
}
默认情况下禁用属性添加,并允许您控制要显式添加的属性。
在以前的Spring版本中,它更复杂。
答案 1 :(得分:29)
在Spring 3.1中使用选项ignoreDefaultModelOnRedirect禁用自动将模型属性添加到重定向:
<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />
答案 2 :(得分:10)
添加RedirectAttributes
参数对我不起作用(可能是因为我的HandlerInterceptorAdapter在模型中添加了一些东西),但这种方法确实如此(感谢@ reallynic的comment):
@RequestMapping("save/")
public View doSave(...)
{
...
RedirectView redirect = new RedirectView("/success/");
redirect.setExposeModelAttributes(false);
return redirect;
}
答案 3 :(得分:8)
在Spring 4中,有一种方法可以使用注释在java配置中执行此操作。如果有人需要,我会分享它。
在扩展WebMvcConfigurerAdapter
的配置类上,您需要添加:
@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
@PostConstruct
public void init() {
requestMappingHandlerAdapter.setIgnoreDefaultModelOnRedirect(true);
}
有了这个,你不需要使用RedirectAttributes
,它在java配置中等同于 Matroskin 的答案。
答案 4 :(得分:6)
如果您使用的是Spring 3.1,则可以使用Flash Scope, 否则你可以看看在这里投票最多(不接受)答案中使用的方法:
Spring MVC Controller redirect using URL parameters instead of in response
编辑:
3.1用户的好文章:
http://www.tikalk.com/java/redirectattributes-new-feature-spring-mvc-31
非3.1用户的解决方法:
答案 5 :(得分:2)
试试这个:
public ModelAndView getRequest(HttpServletRequest req, Locale locale, Model model) {
***model.asMap().clear();*** // This clear parameters in url
final ModelAndView mav = new ModelAndView("redirect:/test");
return mav;
}