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

use*_*611 35 java spring-mvc restful-url

我正在尝试重定向,而不将参数添加到我的URL.

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

  @RequestMapping("success/")
  public String doSuccess(...)
  {
    ...
    return "success";
  }
Run Code Online (Sandbox Code Playgroud)

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

任何想法如何摆脱它们?

axt*_*avt 32

在Spring 3.1中,控制此行为的首选方法是向方法添加RedirectAttributes参数:

@RequestMapping("save/")
public String doSave(..., RedirectAttributes ra)
{
    ...
    return "redirect:/success/";
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,它禁用属性添加,并允许您控制要显式添加的属性.

在以前的Spring版本中,它更复杂.

  • 谢谢,像魅力一样!由于我有许多重定向,并且发现它必须将未使用的RedirectAttributes参数添加到我的所有控制器动作中:如果有一种方法可以在我的Spring设置中将此"行为"配置为默认值,那将会很好. (3认同)

小智 31

在Spring 3.1中,使用ignoreDefaultModelOnRedirect选项禁用自动将模型属性添加到重定向:

<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />
Run Code Online (Sandbox Code Playgroud)

  • 对于Spring> = 4.0,使用ignore-default-model-on-redirect ="true" (6认同)
  • 假设rv是`org.springframework.web.servlet.view.RedirectView`的一个实例,可以为每个RedirectView实例设置更细粒度的控件:`rv.setExposeModelAttributes(<false或true>);` (2认同)
  • 我认为默认禁用它是一个好主意.您永远不会知道您的模型中有哪些敏感信息,而您不打算公开. (2认同)

Lu5*_*u55 10

添加RedirectAttributes参数对我不起作用(可能是因为我的HandlerInterceptorAdapter在模型中添加了一些东西),但这种方法确实如此(感谢@ reallynic的评论):

@RequestMapping("save/")
public View doSave(...)
{
    ...
    RedirectView redirect = new RedirectView("/success/");
    redirect.setExposeModelAttributes(false);
    return redirect;
}
Run Code Online (Sandbox Code Playgroud)


Mel*_*Mel 8

在Spring 4中,有一种方法可以使用注释在java配置中执行此操作.我正在分享它,以防任何人需要它,因为我需要它.

在扩展的配置类上WebMvcConfigurerAdapter,您需要添加:

@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;


@PostConstruct
public void init() {
    requestMappingHandlerAdapter.setIgnoreDefaultModelOnRedirect(true);
}
Run Code Online (Sandbox Code Playgroud)

有了这个,你不需要使用RedirectAttributes,它在java配置中与Matroskin的答案相同.


And*_*ios 6

如果您使用的是Spring 3.1,则可以使用Flash Scope,否则您可以在此处查看最多投票(未接受)答案中使用的方法:

Spring MVC Controller使用URL参数重定向而不是响应

编辑:

3.1用户的好文章:

http://www.tikalk.com/java/redirectattributes-new-feature-spring-mvc-31

非3.1用户的解决方法:

Spring MVC自定义范围bean