弹簧MVC控制器:重定向没有参数添加到我的URL中



我正在尝试重定向,而不会添加参数。

@Controller
...
public class SomeController
{
  ...
  @RequestMapping("save/")
  public String doSave(...)
  {
    ...
    return "redirect:/success/";
  }
  @RequestMapping("success/")
  public String doSuccess(...)
  {
    ...
    return "success";
  }

重定向后,我的URL看起来总是像这样的东西:.../success/?param1=xxx&param2=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;
}

最新更新