问题
I\'m trying to redirect without parameters being added to my URL.
@Controller
...
public class SomeController
{
...
@RequestMapping(\"save/\")
public String doSave(...)
{
...
return \"redirect:/success/\";
}
@RequestMapping(\"success/\")
public String doSuccess(...)
{
...
return \"success\";
}
After a redirect my url looks always something like this: .../success/?param1=xxx¶m2=xxx
.
Since I want my URLs to be kind of RESTful and I never need the params after a redirect, I don\'t want them to be added on a redirect.
Any ideas how to get rid of them?
回答1:
In Spring 3.1 use option ignoreDefaultModelOnRedirect to disable automatically adding model attributes to a redirect:
<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />
回答2:
In Spring 3.1 a preferred way to control this behaviour is to add a RedirectAttributes parameter to your method:
@RequestMapping("save/")
public String doSave(..., RedirectAttributes ra)
{
...
return "redirect:/success/";
}
It disables addition of attributes by default and allows you to control which attributes to add explicitly.
In previous versions of Spring it was more complicated.
回答3:
Adding RedirectAttributes
parameter doesn't work for me (may be because my HandlerInterceptorAdapter adds some stuff to model), but this approach does (thanks to @reallynic's comment):
@RequestMapping("save/")
public View doSave(...)
{
...
RedirectView redirect = new RedirectView("/success/");
redirect.setExposeModelAttributes(false);
return redirect;
}
回答4:
In Spring 4 there is a way to do this with java config, using annotations. I'm sharing it in case anyone needs it as I needed it.
On the config class that extends WebMvcConfigurerAdapter
, you need to add:
@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
@PostConstruct
public void init() {
requestMappingHandlerAdapter.setIgnoreDefaultModelOnRedirect(true);
}
With this, you do not need to use RedirectAttributes
, and it is an equivalent in java config to Matroskin's answer.
回答5:
If you're using Spring 3.1, you can use Flash Scope, otherwise you can take a look at the method used in the most voted (not accepted) answer here:
Spring MVC Controller redirect using URL parameters instead of in response
EDIT:
Nice article for 3.1 users:
http://www.tikalk.com/java/redirectattributes-new-feature-spring-mvc-31
Workaround for non-3.1 users:
Spring MVC custom scope bean
回答6:
Try this:
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;
}
来源:https://stackoverflow.com/questions/13247239/spring-mvc-controller-redirect-without-parameters-being-added-to-my-url