0

我有一个有点简单的控制器配置如下:

@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 插入会话中犯了一个错误,我只是在这里删除了它。问题是一样的。

4

1 回答 1

0

内容是请求的内容主体,您使用的内容类型期望在 URL中而不是在内容主体中编码的所有内容。如果你想使用你必须使用的内容体@RequestBody而不是@ModelAttribute.

于 2013-10-07T06:45:30.290 回答