2013-10-07 78 views
0

我有一個有些簡單化控制器,被配置爲這樣:的ModelAttribute不映射應用程序/ x-WWW窗體-urlencoded

@RequestMapping(value = "user/savearticle", method = RequestMethod.POST) 
public @ResponseBody 
Object saveArticle(@ModelAttribute("article")RawArticle rawArticle); 

使用從here截取的代碼片段,我用於控制器看起來做了一個試驗的情況下像這樣:

MvcResult resultActions = 
     mockMvc.perform(MockMvcRequestBuilders.post("/user/savearticle") 
     .contentType(MediaType.APPLICATION_FORM_URLENCODED) 
     .content(convertObjectToForumUrlEncodedBytes(rawArticle))) 
     .andReturn(); 

我只是打印出結果。在任何情況下,的ModelAttribute「rawArticle」不斷最終成爲空當它進入控制器的實現,但是當我用這個:

MvcResult resultActions = mockMvc.perform(
     MockMvcRequestBuilders.post("/user/savearticle") 
     .param("title", rawArticle.getTitle()) 
     .param("tags", rawArticle.getTags()) 
     .param("body", rawArticle.getBody()) 
     .param("author", rawArticle.getAuthor())).andReturn(); 

的映射實際上就像一個魅力。我想要的是,第一個測試正確處理,因爲它似乎是錯誤的,它沒有被映射,我認爲它應該是類似的控制器主要是由另一個程序通過網絡使用Apache HTTP(它自動通過urlencoded形式)。

你們有什麼想法我可以犯一個錯誤嗎?我不會介意張貼我的上下文配置的片段,如果你認爲你需要它來評估問題(或我爲此事POM,只是告訴我,我可能已經錯過了什麼庫應該是足夠了)

更新: 我在測試編號1中將POJO插入到會話中時犯了一個錯誤,我只是在此刪除它。問題是一樣的。

回答

0

內容是請求的內容正文,您正在使用的內容類型需要在內容正文中的URL 而不是中編碼的所有內容。如果你想使用內容主體,你必須使用@RequestBody而不是@ModelAttribute,Spring根據請求參數進行數據綁定。

相關問題