2009-09-06 196 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測試,我使用的嘗試我的功能,並觸發一個POST到http://localhost:8000/userController與參數{名字=「富」,姓氏=「巴}這給了我:

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

所以我試着用{user.firstname =「foo」,user.lastname =「bar」},同樣的錯誤。我需要通過POST或PUT請求發送什麼參數才能使用這種機制來自動映射我的參數一個對象?

乾杯

Nik 

回答

1

如果您在課堂上有註釋,則會產生明顯效果。這導致Spring期望模型屬性存儲在來自之前的GET Web請求的會話中,該請求將該對象放入模型中。

此行爲允許將請求參數部分綁定到模型對象。工作流程如下:

  1. 您收到GET請求來填充模型
  2. 春季結合所有的模型對象,你在@SessionAttributes配置通過名稱或類型的會話
  3. 您收到POST請求與更新後的數據
  4. 從春季會議採取的對象和請求數據結合他們

Othwerise Spring會填充一個空的新對象,這大多不是所需的行爲。

+0

啊哈! :-)這是完全有道理的,所以我誤解了這部分,並假定Spring將值映射到請求的對象,以便可以實例化或請求這些值。這使得簡單的「嚮導」過程成爲可能 – niklassaers 2009-09-06 18:51:49

1

那註釋w ^在會議生病搜索名爲「用戶」的屬性,而參數您在POST發送保存作爲請求的參數:

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

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

More here

+0

對,我想我問的是:如何在我的REST請求中設置此用戶屬性?或者是'用戶'只生活在服務器端會話? – niklassaers 2009-09-06 15:55:47

0

沒有標註應在User方法參數必要,Spring會將它識別爲一個命令對象,並在沒有註釋的情況下綁定它。

@ModelAttribute有點混淆,我覺得,它的含義似乎因情況而異。