パラメータを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の コメント のおかげです):
@RequestMapping("save/")
public View doSave(...)
{
...
RedirectView redirect = new RedirectView("/success/");
redirect.setExposeModelAttributes(false);
return redirect;
}
Spring 4では、注釈を使用してJava configでこれを行う方法があります。必要に応じて誰かが必要に応じて共有しています。
WebMvcConfigurerAdapter
を拡張する構成クラスで、次を追加する必要があります。
@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
@PostConstruct
public void init() {
requestMappingHandlerAdapter.setIgnoreDefaultModelOnRedirect(true);
}
これにより、RedirectAttributes
を使用する必要がなくなり、Java config to Matroskin 's answer)と同等になります。
Spring 3.1を使用している場合は、 Flash Scope を使用できます。それ以外の場合は、ここで最も投票された(受け入れられない)回答で使用されている方法を確認できます。
Spring MVC Controllerは、応答ではなくURLパラメーターを使用してリダイレクトします
編集:
3.1ユーザー向けの素敵な記事:
http://www.tikalk.com/Java/redirectattributes-new-feature-spring-mvc-31
3.1以外のユーザーの回避策:
これを試して:
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;
}