2009-09-06 15 views
1

これはドキュメントのどこかにある必要があると確信していますが、私は数日捜して見つけていません。それは右の私の前にいたとき、私はおそらく、ブラインドabvious質問をためとても残念自分自身を見つめていたが、....Spring 3.0M4とオブジェクトをPOSTにパラメータとして渡す

@RequestMapping(method = RequestMethod.POST) 
public ModelAndView post(@ModelAttribute("user") User user) { 
    ModelAndView mav = new ModelAndView(jsonView); 
    //.... 
    return mav; 
} 

は、これは私のコントローラの一部として、私のPOST機能である、と私は思いますそれを試してみたい。だから私はポスターを起動し、FirefoxのRESTの{姓FIRSTNAME =「foo」という、=「バー}私はパラメータでhttp://localhost:8000/userControllerに私の機能を試すために使用し、POSTを発射テスターは、それは私に与える:

org.springframework.web.HttpSessionRequiredException: Session attribute 'user' required - not found in session 

私は{user.firstname = "foo"、user.lastname = "bar"}と同じエラーを試しています。このメカニズムを使用してパラメータを自動的にマップするには、POSTまたはPUTリクエストでどのパラメータを送信する必要がありますかオブジェクトへ?

乾杯

Nik 

答えて

1

あなたのクラスに@SessionAttributes注釈がある場合、その効果が発生します。これにより、Springは、オブジェクトにモデルを入れる前のGET Webリクエストからセッションにモデル属性が格納されることを期待します。

この動作では、要求パラメータをモデルオブジェクトに部分的にバインドすることができます。次のようにワークフローは次のとおりです。

  1. あなたは
  2. 春は、すべてのモデルは、あなたがしてPOST要求を受信したセッションに@SessionAttributes
  3. を設定したいずれかの名前や種類によってオブジェクトを結合したモデルを移入するGET要求を受け取ります更新されたデータ
  4. 春は
  5. それらに
をセッションからオブジェクトを受け取り、要求データをバインドします

Othwerise Springは空の新しいオブジェクトを作成しますが、これはほとんどの場合望ましい動作ではありません。

+0

Aha! :-)それは完全に意味をなさないので、私はこの部分を誤解し、Springがリクエストされたオブジェクトに値をマッピングし、インスタンス化されたり要求されたりすると仮定しました。これは簡単な「ウィザード」プロセスを可能にします – niklassaers

1

その注釈のwセッション中に病気検索「ユーザー」という名前の属性、あなたはPOSTで送信パラメータは、リクエストのパラメータとして格納されている間:

//Get a session attribute: 
request.getSession().getAttribute("user"); 

//Get a request parameter: 
request.getParameter("firstname"); 

More here

+0

私が尋ねるのは、どうして私のRESTリクエストでこのユーザー属性を設定するのですか?または、サーバーサイドのセッションでのみ「ユーザー」が生活していますか? – niklassaers

0

ませ注釈はUserメソッドのパラメータに必要ではないはずSpringはそれをコマンドオブジェクトとして認識し、アノテーションなしでバインドします。

@ModelAttributeは少し混乱していますが、その意味は状況によって異なるようです。

関連する問題