2016-06-15 23 views
0

我有一个控制器方法。如何从JUNIT测试用例调用Spring Controller的方法使用@RequestBody

@RequestMapping(method = RequestMethod.POST) 
    @ResponseBody 
    public String uploadFiles(@RequestBody MyModel myModel) {...} 

而且我必须从JUNIT测试用例中调用它。

到目前为止,我尝试不同的方法,他们中的一些是低于其给我

java.lang.AssertionError: Status expected:<200> but was:<415>

MvcResult result; 
      result = getMockMvc().perform(post("/fileUpload")) 
        .andExpect(status().isOk()) 
        .andReturn(); 

result = getMockMvc().perform(post("/fileUpload").accept(APPLICATION_JSON_CHARSET_UTF_8)) 
         .andExpect(status().isOk()) 
         .andReturn(); 

我不能把我的PARAM在RequestHeader, RequestParam或PathVariable。

回答

1

HTTP状态415表示不支持的媒体类型,这意味着控制器未接收到它期望的请求媒体类型。

如果您在您的JUnit测试用例中设置了accept(APPLICATION_JSON_CHARSET_UTF_8),那么您的控制器也应该有consumes = MediaType.APPLICATION_JSON_UTF8_VALUE作为其@RequestMapping注释的一部分。

编辑:如果你只问具体怎么追加请求主体,以JUnit测试,您可以添加:

result = getMockMvc().perform(post("/fileUpload")) .content("payload string") .contentType("application/json; charset=utf-8") .accept(MediaType.APPLICATION_JSON_UTF8_VALUE) .andExpect(status().isOk()) .andReturn();

+0

是的,它现在工作。没有设置内容(...)。谢谢@Minh谢谢 – Jaikrat

1

你可以试试这个:

MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON) 
      .accept(MediaType.APPLICATION_JSON).content(jsonContent)).andReturn(); 

其中url =“/ fileUpload”和jsonContent是您的请求json内容的字符串类型。

+0

。你的方法也是对的。但是我们可以添加'.andExpect(status()。isOk())'。 – Jaikrat

相关问题