Ответ 1
В Spring 3.1 используйте опцию ignoreDefaultModelOnRedirect, чтобы автоматически отключить атрибуты модели для перенаправления:
<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />
Я пытаюсь перенаправить без добавления параметров в мой URL.
@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-адреса были вроде RESTful, и мне не нужны параметры после перенаправления, я не хочу, чтобы их добавляли в перенаправление.
Любые идеи, как избавиться от них?
В Spring 3.1 используйте опцию ignoreDefaultModelOnRedirect, чтобы автоматически отключить атрибуты модели для перенаправления:
<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />
В Spring 3.1 предпочтительным способом управления этим поведением является добавление к вашему методу параметра RedirectAttributes
:
@RequestMapping("save/")
public String doSave(..., RedirectAttributes ra)
{
...
return "redirect:/success/";
}
Он отключает добавление атрибутов по умолчанию и позволяет вам контролировать, какие атрибуты нужно явно добавлять.
В предыдущих версиях Spring это было более сложно.
Добавление параметра RedirectAttributes
не работает для меня (возможно, потому, что мой HandlerInterceptorAdapter добавляет некоторые вещи для модели), но этот подход делает (благодаря @reallynic comment):
@RequestMapping("save/")
public View doSave(...)
{
...
RedirectView redirect = new RedirectView("/success/");
redirect.setExposeModelAttributes(false);
return redirect;
}
Если вы используете Spring 3.1, вы можете использовать Flash Scope, в противном случае вы можете взглянуть на метод, используемый в наиболее голосуемом (не принимаемом) ответе здесь:
Spring Контроллер MVC перенаправляется с использованием параметров URL вместо ответа
ИЗМЕНИТЬ:
Хорошая статья для пользователей 3.1:
http://www.tikalk.com/java/redirectattributes-new-feature-spring-mvc-31
Обходной путь для пользователей, не относящихся к 3.1:
В Spring 4 есть способ сделать это с помощью java config, используя аннотации. Я делюсь ею, если кому-то это понадобится, поскольку мне это нужно.
В классе конфигурации, который расширяет WebMvcConfigurerAdapter
, вам нужно добавить:
@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
@PostConstruct
public void init() {
requestMappingHandlerAdapter.setIgnoreDefaultModelOnRedirect(true);
}
При этом вам не нужно использовать RedirectAttributes
, и это эквивалент в java config для ответа Matroskin.
Попробуйте следующее:
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;
}