Spring MVC Controller:没有参数的重定向被添加到我的URL

时间:2012-11-06 08:35:55

标签: java spring-mvc restful-url

我正在尝试重定向,而不会将参数添加到我的网址。

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

  @RequestMapping("success/")
  public String doSuccess(...)
  {
    ...
    return "success";
  }

重定向后,我的网址看起来总是这样:.../success/?param1=xxx&param2=xxx。 由于我希望我的URL有点RESTful,并且在重定向后我从不需要params,我不希望它们被添加到重定向上。

任何想法如何摆脱它们?

6 个答案:

答案 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用户的解决方法:

Spring MVC custom scope bean

答案 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;
}