39

URLにパラメータを追加せずにリダイレクトしようとしています。

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

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

リダイレクト後、私のURLは常に次のようになります.../success/?param1=xxx&param2=xxx。URLを一種のRESTfulにしたいので、リダイレクト後にparamsは必要ないので、リダイレクトに追加したくありません。

それらを取り除く方法はありますか?

4

6 に答える 6

33

Spring 3.1では、この動作を制御するための推奨される方法はRedirectAttributes、メソッドにパラメーターを追加することです。

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

デフォルトで属性の追加を無効にし、明示的に追加する属性を制御できるようにします。

Springの以前のバージョンでは、より複雑でした。

于 2012-11-06T08:41:41.740 に答える
31

Spring 3.1では、オプションignoreDefaultModelOnRedirectを使用して、モデル属性をリダイレクトに自動的に追加することを無効にします。

<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />
于 2013-05-30T16:44:14.997 に答える
13

パラメーターの追加RedirectAttributesは私には機能しません(私のHandlerInterceptorAdapterがモデルにいくつかのものを追加するためかもしれません)が、このアプローチは機能します(@reallynicのコメントに感謝します):

@RequestMapping("save/")
public View doSave(...)
{
    ...
    RedirectView redirect = new RedirectView("/success/");
    redirect.setExposeModelAttributes(false);
    return redirect;
}
于 2015-09-04T20:27:46.810 に答える
9

Spring 4では、アノテーションを使用してjavaconfigでこれを行う方法があります。私が必要としたときに誰かがそれを必要とする場合に備えて、私はそれを共有しています。

拡張する構成クラスにWebMvcConfigurerAdapter、以下を追加する必要があります。

@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;


@PostConstruct
public void init() {
    requestMappingHandlerAdapter.setIgnoreDefaultModelOnRedirect(true);
}

これにより、を使用する必要はありません。これRedirectAttributesは、Java構成でMatroskinの回答と同等です。

于 2016-10-27T14:42:10.463 に答える
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以外のユーザーの回避策:

SpringMVCカスタムスコープBean

于 2012-11-06T08:43:57.993 に答える
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;
}
于 2017-02-03T12:58:54.597 に答える