我正在尝试重定向,而不会添加参数。
@Controller
...
public class SomeController
{
...
@RequestMapping("save/")
public String doSave(...)
{
...
return "redirect:/success/";
}
@RequestMapping("success/")
public String doSuccess(...)
{
...
return "success";
}
重定向后,我的URL看起来总是像这样的东西:.../success/?param1=xxx¶m2=xxx
。由于我希望我的URL有点静止,并且我不需要重定向后的参数,所以我不希望将它们添加到重定向上。
有什么想法如何摆脱它们?
在春季3.1中控制此行为的首选方法是将RedirectAttributes
参数添加到您的方法:
@RequestMapping("save/")
public String doSave(..., RedirectAttributes ra)
{
...
return "redirect:/success/";
}
它默认禁用添加属性,并允许您控制要明确添加的属性。
在春季的先前版本中,它更为复杂。
在春季3.1中使用选项忽略fefaultmodelonredirect以自动将模型属性添加到重定向:
<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />
添加 RedirectAttributes
参数对我不起作用(可能是因为我的HandlerInterceptorceptorAdapter添加了一些内容),但是这种方法确实可以(多亏 @ @trunnic的评论):
@RequestMapping("save/")
public View doSave(...)
{
...
RedirectView redirect = new RedirectView("/success/");
redirect.setExposeModelAttributes(false);
return redirect;
}
在春季4中,有一种方法可以使用注释使用Java Config进行此操作。我要分享它,以防万一需要它,因为我需要它。
在扩展WebMvcConfigurerAdapter
的配置类上,您需要添加:
@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
@PostConstruct
public void init() {
requestMappingHandlerAdapter.setIgnoreDefaultModelOnRedirect(true);
}
这样,您不需要使用RedirectAttributes
,它在Java Config中是等于 Matroskin 的答案。
如果您使用的是Spring 3.1,则可以使用Flash Scope,否则,您可以在此处查看最投票(未接受的)答案中使用的方法:
使用URL参数而不是响应
的弹簧MVC控制器重定向编辑:
3.1用户的不错文章:
http://www.tikalk.com/java/redirectattributes-new-feature-spring-mvc-31
非3.1用户的解决方法:
春季MVC自定义范围bean
尝试以下:
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;
}