我有一个有点简单的控制器配置如下:
@RequestMapping(value = "user/savearticle", method = RequestMethod.POST)
public @ResponseBody
Object saveArticle(@ModelAttribute("article")RawArticle rawArticle);
使用从这里获取的代码片段,我为控制器制作了一个测试用例,如下所示:
MvcResult resultActions =
mockMvc.perform(MockMvcRequestBuilders.post("/user/savearticle")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.content(convertObjectToForumUrlEncodedBytes(rawArticle)))
.andReturn();
我只是打印出结果。在任何情况下,ModelAttribute“rawArticle”在进入控制器的实现时总是以 null 结束,但是当我使用它时:
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 插入会话中犯了一个错误,我只是在这里删除了它。问题是一样的。